Python에서 PDF 생성하기

저의 가장 좋아하는 라이브러리는 pdf-reports입니다.

Page content

Python을 사용한 PDF 보고서 생성

Python은 광범위한 라이브러리와 모듈을 통해 전문적인 PDF 보고서를 생성하는 강력한 도구를 제공합니다.

이 가이드는 Python을 사용하여 PDF 문서를 생성하는 방법에 대해 다룹니다. ReportLab, FPDF, Xhtml2pdf, WeasyPrint, Jinja2, pdf-reports 및 PdfKit과 같은 인기 있는 라이브러리에 대해 설명합니다.

python on the report

왜 Python을 사용하여 PDF 보고서를 생성해야 하나요?

  • 자동화: Python 스크립트는 보고서 생성을 자동화하여 시간을 절약하고 인간 오류를 줄일 수 있습니다.
  • 맞춤화: 텍스트, 이미지, 표, 그래프를 추가하여 특정 요구사항에 맞춘 보고서를 만들 수 있습니다.
  • 일관성: 표준화된 템플릿을 통해 보고서 간 브랜딩 일관성을 유지할 수 있습니다.
  • 유연성: 영수증, 사업 보고서, 데이터 요약 또는 기타 문서 유형을 생성할 수 있습니다.

PDF 생성을 위한 인기 있는 Python 라이브러리

ReportLab

ReportLab은 프로그래밍 방식으로 PDF 문서를 생성할 수 있는 다용도 라이브러리입니다. 텍스트, 이미지, 표, 그래픽을 추가할 수 있어 다양한 보고서 유형에 적합합니다.

장점:

  • 풍부한 기능 세트
  • 사용이 쉬운 고수준 API
  • 주석 및 인터랙티브 폼과 같은 고급 기능 지원

단점:

  • 다른 라이브러리에 비해 학습 곡선이 더 가파름
  • 일부 작업에 대해 직관적인 API가 아님

ReportLab 사용법

설치: pip를 사용하여 ReportLab을 설치합니다:

pip install reportlab

기본 설정:

from reportlab.pdfgen import canvas
c = canvas.Canvas('hello.pdf')
# 텍스트 추가:
python c.drawString(100, 800, "Hello World")
# PDF 저장:
python c.save()

FPDF

FPDF은 순수 Python으로 작성된 간단하면서도 강력한 PDF 생성 라이브러리입니다. 최소한의 코드로 기본 PDF 문서를 생성하기에 이상적입니다.

장점:

  • 쉽게 배우고 사용 가능
  • 가볍고 빠름
  • 유니코드 문자 지원

단점:

  • ReportLab에 비해 기능 세트가 제한적
  • 페이지 내 요소 배치에 대한 제어가 덜 함

FPDF 사용법

설치: pip를 사용하여 FPDF을 설치합니다:

pip install fpdf2
기본 설정:
from fpdf import FPDF pdf = FPDF()

# 텍스트 추가:
python pdf.add_page()
pdf.set_font('Arial', 'B', 16)
pdf.cell(40, 10, 'Hello World')
# PDF 저장:
python pdf.output('hello.pdf', 'F')

Xhtml2pdf

Xhtml2pdf는 HTML과 CSS를 PDF로 변환하는 도구로, 내부적으로 ReportLab을 사용합니다. HTML 템플릿을 사용하여 PDF를 생성할 수 있어 웹에서 PDF로의 변환에 이상적입니다.

장점:

  • HTML과 CSS를 PDF로 변환
  • 복잡한 레이아웃 및 스타일링 지원
  • Django와 같은 웹 프레임워크와 잘 통합

단점:

  • HTML과 CSS에 대한 지식이 필요
  • 간단한, 웹 기반 이외의 보고서에는 적합하지 않을 수 있음

Xhtml2pdf 사용법

설치: pip를 사용하여 Xhtml2pdf을 설치합니다:

pip install xhtml2pdf

HTML에서 PDF 생성: python

from xhtml2pdf import pisa
html = "<h1>Hello World</h1>"
with open('hello.pdf', 'wb') as output_file:
  pisa_status = pisa.CreatePDF(html, dest=output_file)

WeasyPrint

WeasyPrint은 HTML과 CSS를 고해상도 렌더링으로 PDF 문서로 변환할 수 있는 강력한 Python 라이브러리입니다. 보고서, 영수증 또는 정확한 포맷이 필요한 기타 문서를 생성하는 데 특히 유용합니다. 아래는 다양한 시나리오에서 WeasyPrint을 사용하는 몇 가지 예시입니다.

기능

  • HTML과 CSS를 PDF 문서로 변환.
  • Jinja2와 같은 템플릿 엔진을 사용하여 동적 데이터 렌더링을 지원.

설치:

pip install weasyprint

HTML 문자열에서 PDF 생성의 간단한 예시:

from weasyprint import HTML

html_string = """
<html>
<head><title>Sample PDF</title></head>
<body>
<h1>Hello, WeasyPrint!</h1>
<p>This is a sample PDF generated using WeasyPrint.</p>
</body>
</html>
"""

HTML(string=html_string).write_pdf("sample.pdf")

이 예시에서는 WeasyPrint의 HTML 클래스가 HTML 문자열을 “sample.pdf"라는 이름의 PDF 파일로 변환합니다.

파일에서 HTML 로드

HTML 콘텐츠를 직접 파일에서 로드할 수도 있습니다:

from weasyprint import HTML

# 파일에서 HTML 로드
HTML('sample.html').write_pdf('output.pdf')

이 방법은 HTML 콘텐츠가 외부 파일에 저장되어 있을 때 유용합니다. CSS 스타일시트 사용

WeasyPrint은 CSS 스타일시트를 사용하여 PDF 문서를 스타일링하는 것을 지원합니다. CSS 파일을 적용하는 방법은 다음과 같습니다:

from weasyprint import HTML

# 파일에서 HTML 및 CSS 로드
HTML('sample.html').write_pdf('output.pdf', stylesheets=['sample.css'])

이 방법은 더 복잡한 스타일링을 가능하게 하여 시각적으로 매력적인 PDF를 생성하는 데 도움이 됩니다.

Jinja2

Jinja2는 Python에서 사용할 수 있는 강력한 템플릿 엔진으로, 템플릿 내에 Python 표현식, 조건문, 루프를 삽입하여 동적 콘텐츠를 생성할 수 있습니다. 이 가이드는 Jinja2를 Python에서 사용하는 다양한 예시를 다룹니다. 기본 변수 치환부터 템플릿 상속과 같은 고급 기능까지.

Jinja2 주요 기능

  • WeasyPrint 또는 ReportLab과 함께 사용하여 동적으로 HTML 콘텐츠를 생성할 수 있는 템플릿 엔진.
  • 사전 정의된 템플릿에 데이터를 삽입하기에 이상적.
  • 설치:
pip install jinja2

공식 Jinja2 문서 페이지에서 예시를 참조하십시오: https://jinja.palletsprojects.com/en/3.0.x/

pdfkit

pdfkit은 HTML 콘텐츠를 PDF 문서로 변환하는 과정을 간소화하는 강력한 Python 라이브러리입니다. wkhtmltopdf 유틸리티의 래퍼로 작동하여 WebKit을 사용하여 HTML 페이지를 정확하게 PDF 형식으로 렌더링합니다. 이 가이드는 pdfkit을 사용하여 PDF를 생성하는 다양한 예시와 사용 사례를 다룹니다.

주요 기능

설치:

# 그리고 wkhtmltopdf가 설치되어 있어야 함.

기본 사용법 - HTML 문자열을 PDF로 변환

pdfkit.from_string()을 사용하여 간단한 HTML 문자열을 PDF 파일로 변환할 수 있습니다:

import pdfkit

html_sample = """
<html>
<head><title>Sample PDF</title></head>
<body>
<h1>This is a heading</h1>
<p>First line.</p>
<p>Second line.</p>
<p>Third line.</p>
<p>Fourth line.</p>
</body>
</html>
"""

pdfkit.from_string(html_sample, 'output.pdf')

이렇게 하면 현재 디렉토리에 output.pdf라는 이름의 PDF 파일이 생성됩니다.

로컬 HTML 파일을 PDF로 변환

로컬에 저장된 HTML 파일을 사용하려면 pdfkit.from_file()을 사용합니다:

import pdfkit

pdfkit.from_file('local.html', 'sample.pdf')

PDF 보고서 라이브러리 (pdf-reports)

Python에서 pdf-reports 라이브러리를 사용하여 HTML 또는 Pug 템플릿에서 전문적인 보고서를 생성하는 것은 매우 강력한 방법입니다. 이 라이브러리는 Semantic UI 프레임워크를 통해 현대적인 구성 요소를 활용하고, 표, 플롯 및 기타 요소를 PDF에 삽입할 수 있는 루틴을 제공합니다.

pdf-reports 라이브러리는 HTML 또는 Pug 템플릿에서 시각적으로 매력적인 PDF 보고서를 생성하도록 설계되었습니다. 공식적으로는 Python 3.x를 지원하지만, 적절한 버전의 weasyprint을 사용하면 Python 2.x에서도 작동할 수 있습니다. 이는 프로그래밍적으로 동적이고 잘 구성된 문서를 생성하는 데 유연한 도구입니다.

주요 기능

  • 현대 구성 요소: Semantic UI 프레임워크를 사용하여 현대적인 구성 요소를 제공.
  • 요소 삽입: 표, 플롯 및 기타 요소를 PDF에 삽입할 수 있음.
  • 템플릿 지원: HTML 및 Pug 템플릿을 지원하여 유연한 보고서 설계 가능.

pdf-reports의 예시 사용법

설치:

pip install pdf-reports

pdf-reports 라이브러리를 사용하는 기본 예시는 다음과 같습니다:

from pdf_reports import PDFReport

# 템플릿 파일 (template.pug)을 정의
template = """
doctype html
html
  head
    title= title
  body
    h1= title
    p This is a sample report.
"""

# PDF 보고서 인스턴스 생성
report = PDFReport(template)

# 템플릿의 컨텍스트 설정
context = {
    'title': 'Sample Report'
}

# PDF 생성
pdf = report.generate(context, output='sample_report.pdf')

Python에서 PDF 생성에 대한 새로운 시도

Python은 PDF 보고서 생성을 위한 다양한 강력한 라이브러리를 제공합니다. 영수증, 사업 보고서, 데이터 요약 등 생성하려는 문서 유형에 관계없이, 이러한 도구는 프로세스를 자동화하고 문서를 맞춤화하며 브랜딩 일관성을 보장할 수 있습니다. 요구사항에 가장 적합한 라이브러리를 선택하고 오늘 바로 전문적인 PDF를 생성해 보세요!

유용한 링크