CodeGym /자바 코스 /Python SELF KO /리포트 생성을 위한 PDF 파일 작성 및 구조화

리포트 생성을 위한 PDF 파일 작성 및 구조화

Python SELF KO
레벨 44 , 레슨 0
사용 가능

1. 리포트를 위한 PDF 문서 구조

리포트를 만들기 위해 PDF 파일을 저장하고 구조화하는 방법을 배워보자. 여러분의 리포트가 전문 디자인처럼 보이게 만들자.

기초부터 시작하자. 이미 알고 있듯이, 좋은 리포트는 유용한 정보를 제공하는 것뿐만 아니라 이해하기 쉽게 작성되어야 해. 즉, 올바른 구조가 필요하지. 리포트가 내용이 풍부하고 멋있게 작성되도록 만드는 방법을 보자.

PDF를 올바르게 조직하고 구조화하는 방법

문서의 구조는 코드 블록의 계획과 같아, 다만 텍스트의 세계에서. 좋은 구조는 다음을 포함해:

  • 목차: 문서에 무엇이 포함되어 있는지, 어디에서 찾을 수 있는지를 빠르게 이해하도록 돕는다. 만약 리포트가 크다면, 목차는 최고의 친구야.
  • 섹션 및 하위 섹션: 논리적인 정보 순서는 독자의 이해를 돕는다. 삶에서처럼: 처음에는 서막, 그다음에 절정, 마지막에는 결말.
  • 시각적 요소: 표, 그래프, 이미지들은 종종 텍스트보다 많은 것을 말해줄 수 있어.

목차와 섹션 생성으로 네비게이션 편리성 제공

목차와 섹션을 생성하는 것은 여러분의 리포트가 거대한 텍스트 뭉치가 되지 않도록 보장하는 일이야. 정보를 논리적인 블록으로 나누고 제목을 잊지 말도록 하자.

Python

from PyPDF2 import PdfWriter, PdfReader

# 새로운 PDF 문서 생성
writer = PdfWriter()

# 빈 페이지 추가
writer.add_blank_page(width=210, height=297)  # 표준 A4 사이즈

# PDF를 파일로 기록
with open("report.pdf", "wb") as f:
    writer.write(f)

2. PDF 형태로 리포트 생성

이제 리포트를 구조화하는 방법을 알았으니, 리포트를 만드는 방법으로 넘어가보자. PyPDF2는 이 작업에서 여러분의 친구야.

PyPDF2를 사용하여 데이터에서 리포트 생성

데이터에서 리포트를 생성하는 것은 복사와 붙여넣기만이 아니야. 여러분의 문서는 여러분이 고양이처럼 생동감을 가져야 해, 일할 때 방해하는 고양이처럼. PyPDF2는 데이터를 추출하고 문서에 추가하며 외형을 커스터마이징하도록 도와줘.

Python

import PyPDF2

# 기존 PDF 열기
with open('source.pdf', 'rb') as read_file:
    reader = PdfReader(read_file)
    writer = PdfWriter()

    # 페이지를 새로운 파일로 복사
    for page in reader.pages:
        writer.add_page(page)

    # 제목 추가
    writer.add_blank_page()
    page = writer.pages[-1]
    page.content = """안녕! 이건 내 리포트야!""" # 에러 발생!!
    
    # 새로운 파일에 기록
    with open('structured_report.pdf', 'wb') as write_file:
        writer.write(write_file)

아쉽게도 이 코드는 작동하지 않을 거야. PyPDF2는 페이지 내용 작업을 지원하지 않으며, 텍스트 추가조차 불가능해. 기존 PDF에 텍스트를 추가하려면, `ReportLab`을 사용하면 돼.

3. `ReportLab` 사용

이 수정된 예제에서는 PyPDF2를 사용하여 PDF를 생성하고, 텍스트를 추가하기 위해 `ReportLab`을 사용해볼게. 그런 다음 결과를 하나의 PDF로 병합해보자.

텍스트 추가를 위한 `ReportLab` 사용 수정 코드

Python

import PyPDF2
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4

# ReportLab으로 제목 페이지 생성
title_pdf = "title_page.pdf"
c = canvas.Canvas(title_pdf, pagesize=A4)
c.drawString(100, 800, "안녕! 이건 내 리포트야!")
c.save()

# 통합 PDF 생성
with open("source.pdf", "rb") as source_file, open(title_pdf, "rb") as title_file:
    reader_source = PyPDF2.PdfReader(source_file)
    reader_title = PyPDF2.PdfReader(title_file)
    writer = PyPDF2.PdfWriter()

    # 제목 페이지 추가
    writer.add_page(reader_title.pages[0])

    # 원본 파일에서 페이지 복사
    for page in reader_source.pages:
        writer.add_page(page)

    # 제목이 추가된 새로운 PDF 저장
    with open("structured_report.pdf", "wb") as output_file:
        writer.write(output_file)

print("리포트가 성공적으로 생성되어 'structured_report.pdf'로 저장되었습니다.")

수정 설명:

  1. 제목 페이지 생성: `ReportLab`을 사용하여 "안녕! 이건 내 리포트야!"라는 텍스트가 포함된 PDF 파일 생성.
  2. PDF 병합: `PyPDF2`를 사용하여 제목 페이지와 `source.pdf`의 나머지 페이지 추가.
  3. 최종 파일 저장: 병합된 PDF를 `structured_report.pdf`로 저장.

더 나은 구조화를 위한 제목 및 섹션 추가

이제 문서의 기초가 만들어졌으니, 구조를 조금 더 추가해보자. 제목 및 하위 제목을 추가하면 정보의 숲에서 길을 잃지 않도록 도움을 준다. PyPDF2는 페이지를 삽입할 수 있지만, 더 복잡한 작업(예: 글꼴 설정 등)이 필요하다면 `ReportLab` 라이브러리를 고려할 수 있어.

Python

from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas

def create_pdf(filename):
    # PDF 캔버스 생성
    c = canvas.Canvas(filename, pagesize=letter)
    text = c.beginText(40, 750)

    # 제목
    text.setFont("Helvetica-Bold", 18)
    text.textLine("프로젝트 '매우비밀' 리포트")

    # 하위 제목
    text.setFont("Helvetica", 14)
    text.textLine("챕터들:")
    text.textLine("1. 소개")
    text.textLine("2. 데이터 분석")
    text.textLine("3. 결론")

    c.drawText(text)
    c.save()

create_pdf("detailed_report.pdf")

오류와 주의 사항

다른 프로그래밍처럼, PDF 문서 처리에는 고유한 함정이 있어. 주요 골칫거리 중 하나는 페이지 인덱스를 올바르게 사용하는 거야. PyPDF2에서는 Python과 마찬가지로 페이지 번호가 0부터 시작하니까. 잘못된 페이지를 추가하지 않도록 주의하자.

또 다른 문제는 잘못된 텍스트 인코딩이야. PDF 문서에는 다양한 형식으로 인코딩된 텍스트가 포함될 수 있어. 특히 리포트가 여러 언어를 사용할 경우 여러분의 코드가 문자를 올바르게 처리할 수 있는지 확인하자.

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION