Привет всем!. В этом посте я хочу поделиться с вами небольшим руководством, которое покажет вам, как создавать файлы PDF с помощью Python и xhtml2pdf Анкет
xhtml2pdf LIB используется для создания PDF -файлов из HTML -файлов. Это просто руководство, которое я сделал для себя, но я хочу поделиться им с вами.
Предупреждение: Кроме того, это руководство, которое я сделал с экспериментальными целями, я не использовал его в производственной среде. Поэтому вы должны иметь в виду, что его использование в производстве может иметь проблемы. Лучшей альтернативой для создания PDF -файлов является http://weasyprint.org/ Анкет
Требования
- Python (Я использую Python 3.8.2)
- PIP (я использую PIP 20.1.1)
Настройка проекта
Чтобы создать наш проект, мы собираемся использовать Virtualenv , чтобы создать изолированную среду Python для этого проекта. Однако вы также можете использовать Pyenv или Вен Анкет
Итак, во -первых, мы должны установить Вен
.
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
ПРИМЕЧАНИЕ: Чтобы выйти из среды, вам просто нужно написать деактивировать
Анкет
Установить зависимости
Чтобы создать наши PDF -файлы, нам нужно установить xhtml2pdf
библиотека. Эта библиотека также зависит от html5lib
и reportlab
Анкет
pip install reportlab # https://pypi.org/project/reportlab/ pip install html5lib # https://pypi.org/project/html5lib/ pip install xhtml2pdf
Примечание: Нам нужна версия XHTML2PDF выше 0,1A1
работать с Python3.
Мы можем увидеть установленные зависимости со следующей командой.
# 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
И установить наши зависимости от Требования.txt
файл.
pip install -r requirements.txt
Генерировать PDF из строки
Теперь, когда у нас установлены необходимые модули, мы можем начать писать код. Во -первых, мы должны импортировать xhtml2pdf Модуль, который поможет нам создать наши файлы PDF.
# main.py # import section .... from xhtml2pdf import pisa # import python module # ....
Теперь мы можем определить некоторые константы.
# main.py # Constants section .... # Content to write in our PDF file. SOURCE = "PDF from string
" # 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.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 из шаблона
Здесь мы создадим файл PDF с помощью шаблона HTML. Мы должны помнить, что xhtml2pdf Поддерживает до HTML4. Итак, во -первых, мы должны создать HTML -файл, который будет вести себя как шаблон для нашего файла PDF.
touch template.html
И мы определим простой шаблон HTML.
PDF Generator First PDF
PDF with html template
John
Snow
35
Создайте новую константу, чтобы определить наш файл шаблона.
# 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
Последние слова
Спасибо, что прочитали этот пост, и вы можете найти код этого руководства Здесь Анкет
Оригинал: “https://dev.to/brayvasq/create-pdfs-using-python-and-xhtml2pdf-131m”