Рубрики
Без рубрики

Создать PDF -файлы с использованием Python и XHTML2PDF

Привет всем!. В этом посте я хочу поделиться с вами небольшим руководством, которое покажет вам, как создать … Tagged with Python, Tuperial, PDF, HTML.

Привет всем!. В этом посте я хочу поделиться с вами небольшим руководством, которое покажет вам, как создавать файлы 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”