- Published on
[Python] EbookLib 사용법
- Authors
- Name
- Almer Minified
EbookLib이란?
EbookLib은 을 사용하여 EPUB 형식의 전자책을 생성, 수정, 관리할 수 있는 라이브러리이다. 파이썬을 이용해서 전자책의 구조를 조작하고, 내용을 추가하거나 수정할 수 있다. 전자책 프로그램을 개발하려면 파이썬에선 거의 필수적인 라이브러리이다. EbookLib을 사용하면 EPUB 파일을 건드릴 수 있다. 물론 챕터, 이미지, 스타일, 표지, 메타데이터 등 전자책의 다양한 요소를 다룰 수 있게 된다. 게다가 다른 포맷들도 지원한다. 물론 EPUB 포맷에 초점을 맞추고 있지만 다른 전자책 형식도 일부 지원할 수 있다.
기본 사용법
설치: 환경에서 EbookLib를 설치하려면, 터미널이나 명령 프롬프트에서 pip를 쓰자.
pip install EbookLib
EPUB 생성
from ebooklib import epub # 새 EPUB 책 객체 생성 book = epub.EpubBook() # 메타데이터 설정 book.set_identifier('identifier123123') book.set_title('샘플책제목') book.set_language('ko') # 책의 저자 추가 book.add_author('이주인') # 챕터 생성 c1 = epub.EpubHtml(title='서론', file_name='chap_01.xhtml', lang='ko') c1.content = '<h1>서론 헤딩</h1><p>안녕 이건 처음 쓰는 서문이야</p>' # 챕터를 책에 추가 book.add_item(c1) # 목차와 책의 구조 정의 book.toc = (c1,) book.add_item(epub.EpubNcx()) book.add_item(epub.EpubNav()) # 파일 저장 epub.write_epub('test.epub', book, {})
간단하다. 실제로 간단한 요소들도 구성되어 있으며 문서를 읽으면 금방 이해할수 있을 것이다.
깃헙에서 살펴보기EPUB으로 기존 파일 읽고 바꾸기
# 기존 EPUB 파일 읽기 book = epub.read_epub('/Users/dev/epub/ebooksample1.epub') # 책의 내용을 수정하거나 추가 작업을 할 수 있음
위에서 살펴본 것처럼 책의 내용을 또 다시 조작할 수 있다. 위에선 생성한 후 썼지만 여기선 객체에 그대로 작업할 수 있다.
그 외 사용방법 예시
EbookLib을 이용해서 커스터마이징을 좀 더해보고, 네스티드 목차 관리, 미디어 및 리소스 혼합을 해보자.
네스티드 목차 관리는 내가 그냥 붙인 말인데 목차 속 목차 같은 것을 의미한다.
1. 커스텀 스타일링
EbookLib을 사용하여 EPUB 파일에 CSS 스타일을 적용할 수도 있다. 이를 통해 전자책의 디자인을 바꾸고 가독성을 더 높여줄 수 있을 것이다.
from ebooklib import epub
# 새 EPUB 객체 만들기
book = epub.EpubBook()
# CSS 스타일 정의
style = '''
@namespace epub "http://www.idpf.org/2007/ops";
body {
font-family: Georgia, serif;
margin: 0;
}
h2 {
text-align: left;
text-transform: uppercase;
font-weight: 200;
}
ol {
list-style-type: none;
}
ol > li:first-child {
margin-top: 0.3em;
}
'''
# CSS 파일 추가
nav_css = epub.EpubItem(uid="style_nav", file_name="style/nav.css", media_type="text/css", content=style)
book.add_item(nav_css)
기존 html 문서에서 css설정하는것과 방법이 비슷한다 근데 http://www.idpf.org/2007/ops 라는 주소를 설정해줄 수도 있는데 이건 필수는 아니지만 전에 RSS에서 언급했던 것처럼 그냥 표준의 일부라고 이해하면 된다. 표준을 제시해주는 것이라고 생각하자. 다시 말하자면 http://www.idpf.org/2007/ops는 EPUB 전자책 표준과 관련된 네임스페이스를 나타내는 주소다. 이 URL은 국제 디지털 출판 포럼(IDPF)에서 정의한 Open Publication Structure (OPS) 표준의 일부라고 한다.
2. 복잡한 목차 관리
EbookLib을 사용하면 복잡한 목차를 생성하고 관리할 수 있다. 하위 레벨의 목차들을 복잡하게 넣을 수도 있다.
# 챕터 생성
c1 = epub.EpubHtml(title='챕터1', file_name='chap_01.xhtml', lang='ko')
c2 = epub.EpubHtml(title='챕터2', file_name='chap_02.xhtml', lang='ko')
# 나머지 코드들 쓰던 대로 쓰면 된다.
# 목차 생성 (여러 레벨의 목차)
book.toc = (
(epub.Section('Part 1'),
(c1, c2)),
(epub.Section('Part 2'),
(c3, c4))
)
이렇게 하면 코드들에 따로따로 타이틀을 붙인 후에 그 챕터마다 섹션을 따로 부여할 수 있게 된다. 문제지에서 많이 보던 목차 속 목차를 구현하기 위해 사용된다.
3. 이미지 등 추가
이미지, 오디오, 비디오 등의 미디어 파일을 추가할 수도 있다. 이것이야말로 전자책의 큰 장점이 아닐까? 이 기능을 사용하여 텍스트 외에도 풍부한 미디어 콘텐츠를 포함시킬 수 있다.
# 이미지 추가
image = open('/Users/images/sample.jpg', 'rb').read()
epub_img = epub.EpubItem(file_name='images/converted_sample.jpg', media_type='image/jpeg', content=image)
book.add_item(epub_img)
# 이미지를 사용하는 챕터
c1 = epub.EpubHtml(title='이미지 추가챕터', file_name='chap_img.xhtml', lang='ko')
c1.content = '<h1>챕터에 이미지가 추가됐음</h1><p><img src="images/converted_sample.jpg" alt="추가된 이미지"></p>'
# 챕터 추가 및 책 저장
book.add_item(c1)
보면 알다시피 원래 파일 경로에서 실제로 ebook에 추가됐을때의 이미지 파일 경로가 다르다. 즉 epub에 맞게 원본 파일을 수정해서 저장하는 것이다.
4. 메타데이터
앞에서 설명했지만 좀 복잡해서 뒤에서 한번 더 설명한다. 메타데이터의 종류는 꽤 많다.
EbookLib을 사용하여 EPUB 전자책을 생성할 때, 메타데이터는 책에 대한 기본적인 정보를 제공하는 중요한 부분이다. 메타데이터는 책의 제목, 저자, 식별자, 언어, 출판사, 출판일 등 다양한 정보를 포함할 수 있으며, 이는 독자가 책을 검색하고, 분류하고, 이해하는 데 도움을 줍니다.
메타데이터 종류
식별자(Identifier)는 책에 대한 고유 식별자이다. 대부분의 경우 ISBN이나 URI 형태로 제공된다.
book.set_identifier('aaa123')
제목 (Title)는 책의 제목을 설정한다.
book.set_title('책제목')
언어 (Language)는 책이 작성된 언어의 코드를 설정한다. 일반적으로 ISO 639-1 언어 코드를 사용한다. 웹프로그래밍을 써봤다면 익숙할 것이다.
book.set_language('ko')
저자 (Author)는 책의 저자나 기여자의 이름을 추가한다. 여러 저자를 추가할 수도 있다.
book.add_author('책지은이이름')
출판사 (Publisher)는 책을 출판한 출판사의 이름을 추가할 수 있다.
book.add_metadata('마블', 'publisher', 'Publisher Name')
출판일 (Publication Date)는 책이 출판된 날짜를 추가할 수 있다. 일반적으로 ISO 8601 날짜 형식을 사용한다.
book.add_metadata('DC', 'date', '2023-12-01', {'event': 'publication'})
커버 이미지 (Cover Image)는 전자책의 표지 이미지를 추가할 수 있다. 이미지 파일은 별도로 준비해야 한다.
book.set_cover("image.jpg", open('/Users/images/cover_image.jpg', 'rb').read())
그리고 그 외 키워드, 설명, 저작권 정보 등 기타 메타데이터를 추가할 수 있다.
book.add_metadata('DC', 'description', '디스크립션, 설명입니다')