Python에서 PDF 생성하기
저의 가장 좋아하는 라이브러리는 pdf-reports입니다.
Python을 사용한 PDF 보고서 생성
Python은 광범위한 라이브러리와 모듈을 통해 전문적인 PDF 보고서를 생성하는 강력한 도구를 제공합니다.
이 가이드는 Python을 사용하여 PDF 문서를 생성하는 방법에 대해 다룹니다. ReportLab, FPDF, Xhtml2pdf, WeasyPrint, Jinja2, pdf-reports 및 PdfKit과 같은 인기 있는 라이브러리에 대해 설명합니다.
왜 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의 Python 래퍼로, HTML을 PDF로 변환.
- 시스템 전체적으로 wkhtmltopdf를 설치해야 함. https://wkhtmltopdf.org/downloads.html
설치:
# 그리고 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를 생성해 보세요!