카테고리 없음

선택한 시를 EPUB 파일로 자동 출간

forSilver 2025. 7. 17. 15:36
반응형

✅ **선택한 시를 EPUB 파일로 변환하고 자동으로 출간(다운로드)**하는 과정을 구축해보겠습니다.
이 기능은 시니어 작가들의 시집을 쉽고 자동으로 전자책으로 만들어주는 핵심입니다.


📘 『시마당 프로젝트 따라하기』

10장. 선택한 시를 EPUB 파일로 자동 출간하기

작성자: easyfly
작성일: 2025년 7월 17일


🟦 1. EPUB 변환을 위한 패키지 설치

✅ 가상환경에서 아래 명령어 실행:

pip install ebooklib

전자책 라이브러리 설치


🟧 2. 뷰 함수 만들기 – EPUB 생성

📁 poem/views.py

from django.http import HttpResponse
from ebooklib import epub
from .models import Poem

def generate_epub(request):
    if request.method == 'POST':
        ids = request.POST.getlist('selected_poems')
        poems = Poem.objects.filter(id__in=ids)

        book = epub.EpubBook()
        book.set_title('시마당 전자시집')
        book.set_language('ko')

        chapters = []

        for poem in poems:
            content = f"<h2>{poem.title}</h2><h4>{poem.author.name}</h4><p>{poem.content.replace('\n', '<br/>')}</p>"
            chapter = epub.EpubHtml(title=poem.title, file_name=f"{poem.id}.xhtml", lang='ko')
            chapter.content = content
            book.add_item(chapter)
            chapters.append(chapter)

        book.toc = chapters
        book.add_item(epub.EpubNcx())
        book.add_item(epub.EpubNav())

        style = 'BODY { font-family: NanumGothic, serif; }'
        nav_css = epub.EpubItem(uid="style_nav", file_name="style/nav.css", media_type="text/css", content=style)
        book.add_item(nav_css)
        book.spine = ['nav'] + chapters

        # 파일 출력
        import io
        buffer = io.BytesIO()
        epub.write_epub(buffer, book)
        buffer.seek(0)

        response = HttpResponse(buffer.read(), content_type='application/epub+zip')
        response['Content-Disposition'] = 'attachment; filename="simadang.epub"'
        return response

🟦 3. URL 연결

📁 poem/urls.py

path('generate/', views.generate_epub, name='generate_epub'),

패스 추가


🟦 4. 목록 페이지 폼 수정 (epub 생성용 POST)

📁 poem/templates/poem/poem_list.html 내 <form> 태그 수정:

<form method="post" action="{% url 'generate_epub' %}">

이렇게 하면 선택한 시들이 POST 방식으로 generate_epub 뷰에 전송됩니다.

폼의 액션 변경


✅ 5. 결과 확인

접속 주소:

http://<EC2 IP>:8000/poem/list/

절차:

  1. 원하는 시의 체크박스를 선택
  2. “선택한 시로 EPUB 만들기” 버튼 클릭
  3. 자동으로 simadang.epub 파일이 다운로드됨

✅ EPUB 구성 예시

  • 제목: 시 제목
  • 저자: 작가 이름
  • 본문: 시의 줄바꿈을 유지한 상태로 <br> 처리
  • 각 시가 챕터처럼 구성되어 목차 탭에서 이동 가능

📌 보너스: 저장소에 기록하고 싶다면?

  • 파일을 서버에 저장하려면 다음을 사용:
with open('/home/easyfly/madang/epub_output/simadang.epub', 'wb') as f:
    epub.write_epub(f, book)

📝 정리

항목 구현 여부
시 목록 체크박스 선택 ✅ 완료
EPUB 변환 로직 구현 ✅ 완료
즉시 다운로드 응답 ✅ 완료
외부 저장 및 전자책 관리 ⏳ (선택적 기능)

다음 예고 – 『11장. 작가별 시집 출간, 날짜별 묶음 출간 등 고급화』

  • 작가별 필터링 기능 추가
  • 특정 날짜 범위만 선택하여 전자책 출간
  • 미리보기 화면 제공 등