Python 및 xhtml2pdf를 사용하여 PDF 만들기
xhtml2pdf lib는 HTML 파일에서 pdf 파일을 만드는 데 사용됩니다. 제가 직접 만든 가이드일 뿐이지만 여러분과 공유하고 싶습니다.
경고: 또한 이것은 실험 목적으로 수행한 가이드이며 프로덕션 환경에서 사용하지 않았습니다. 따라서 프로덕션에서 사용하는 데 문제가 있을 수 있음을 염두에 두어야 합니다. PDF 파일을 만드는 더 나은 대안은 http://weasyprint.org/ 입니다.
요구 사항
Python (Python 3.8.2 사용)
설정 프로젝트
프로젝트를 생성하기 위해 virtualenv 을 사용하여 이 프로젝트에 대해 격리된 파이썬 환경을 생성할 것입니다. 그러나 pyenv 또는 venv 을 사용할 수도 있습니다.
따라서 먼저
venv
를 설치해야 합니다.pip3 install virtualenv
이제 프로젝트 폴더를 만들고 virtualenv를 설정해야 합니다.
# Creating a project folder
mkdir pdfs-example
cd pdfs-example
# Creating the virtual environment
virtualenv env
# Activate the virtual environment
source env/bin/activate
# Create our main file
touch main.py
참고: 환경을 종료하려면
deactivate
를 작성하면 됩니다.종속성 설치
PDF 파일을 생성하려면
xhtml2pdf
라이브러리를 설치해야 합니다. 이 라이브러리는 html5lib
및 reportlab
에도 의존합니다.pip install reportlab # https://pypi.org/project/reportlab/
pip install html5lib # https://pypi.org/project/html5lib/
pip install xhtml2pdf
참고: Python3에서 작업하려면
0.1a1
보다 높은 xhtml2pdf 버전이 필요합니다.다음 명령을 사용하여 설치된 종속성을 볼 수 있습니다.
# Installed dependencies
pip freeze
# The above mentioned command will list something like the following
html5lib==1.1
Pillow==7.2.0
PyPDF2==1.26.0
reportlab==3.5.50
six==1.15.0
webencodings==0.5.1
xhtml2pdf==0.2.4
의존성을 내보낼 수도 있습니다.
pip freeze > requirements.txt
그리고
requirements.txt
파일에서 종속 항목을 설치합니다.pip install -r requirements.txt
문자열에서 PDF 생성
이제 필요한 모듈을 설치했으므로 코드 작성을 시작할 수 있습니다. 먼저 PDF 파일을 만드는 데 도움이 되는 xhtml2pdf 모듈을 가져와야 합니다.
# main.py
# import section ....
from xhtml2pdf import pisa # import python module
# ....
이제 몇 가지 상수를 정의할 수 있습니다.
# main.py
# Constants section ....
# Content to write in our PDF file.
SOURCE = "<html><body><p>PDF from string</p></body></html>"
# Filename for our PDF file.
OUTPUT_FILENAME = "test.pdf"
# ....
좋아, 우리는 다른 함수에서 재사용하고 코드 중복을 피하기 위해 기본 함수를 만들 것입니다.
# main.py
# Methods section ....
def html_to_pdf(content, output):
"""
Generate a pdf using a string content
Parameters
----------
content : str
content to write in the pdf file
output : str
name of the file to create
"""
# Open file to write
result_file = open(output, "w+b") # w+b to write in binary mode.
# convert HTML to PDF
pisa_status = pisa.CreatePDF(
content, # the HTML to convert
dest=result_file # file handle to recieve result
)
# close output file
result_file.close()
result = pisa_status.err
if not result:
print("Successfully created PDF")
else:
print("Error: unable to create the PDF")
# return False on success and True on errors
return result
# ....
기본 기능이 있으면
from_text
기능을 만들 수 있습니다.# main.py
# Methods section ....
def from_text(source, output):
"""
Generate a pdf from a plain string
Parameters
----------
source : str
content to write in the pdf file
output : str
name of the file to create
"""
html_to_pdf(source, output)
# ....
우리의
main
기능은 다음과 같습니다.# main.py
# import section ....
import sys
# Main section ...
if __name__ == "__main__":
if len(sys.argv)> 1 :
if sys.argv[1] == '--help':
print('Info: ')
print('--help List the options to send an email')
print('--text Create a PDF file from a string')
print('--template Create a PDF file from a template')
elif sys.argv[1] == '--text':
print("Creating a PDF file from a string")
from_text(SOURCE, OUTPUT_FILENAME)
else:
print("Please give the type of message to send.")
print("For help execute `python main.py --help`")
터미널에서 다음 명령을 실행하여 기능을 테스트할 수 있습니다.
python main.py --text
# Creating a PDF file from a string
# Successfully created PDF
템플릿에서 PDF 생성
여기에서는 HTML 템플릿을 사용하여 PDF 파일을 생성합니다. xhtml2pdf은 HTML4까지 지원한다는 점을 명심해야 합니다. 따라서 먼저 PDF 파일의 템플릿 역할을 할 HTML 파일을 만들어야 합니다.
touch template.html
그리고 우리는 간단한 html 템플릿을 정의할 것입니다.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>PDF Generator</title>
</head>
<body>
<h1 style="color:red;">First PDF</h1>
<h2 style="color:blue;">PDF with html template</h2>
<p>John</p>
<p>Snow</p>
<p>35</p>
</body>
</html>
템플릿 파일을 정의할 새 상수를 만듭니다.
# main.py
# Constants section ....
# Template file name
TEMPLATE_FILE = "template.html"
# ....
이제 템플릿을 읽고 PDF 파일을 만드는 기능을 만들 수 있습니다.
# main.py
# Methods section ....
def from_template(template, output):
"""
Generate a pdf from a html file
Parameters
----------
source : str
content to write in the pdf file
output : str
name of the file to create
"""
# Reading our template
source_html = open(template, "r")
content = source_html.read() # the HTML to convert
source_html.close() # close template file
html_to_pdf(content, output)
# ....
기본 기능에 옵션을 추가하십시오.
# main.py
# Main section ...
if __name__ == "__main__":
# ....
if len(sys.argv)> 1 :
# if ....
elif sys.argv[1] == '--template':
print("Creating a PDF file from a template")
from_template(TEMPLATE_FILE, OUTPUT_FILENAME)
else:
# ....
터미널에서 다음 명령을 실행하여 기능을 테스트할 수 있습니다.
python main.py --template
# Creating a PDF file from a template
# Successfully created PDF
마지막 말
이 게시물을 읽어 주셔서 감사합니다. 이 가이드의 코드here를 찾을 수 있습니다.
Reference
이 문제에 관하여(Python 및 xhtml2pdf를 사용하여 PDF 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/brayvasq/create-pdfs-using-python-and-xhtml2pdf-131m텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)