- Saved searches
- Use saved searches to filter your results more quickly
- License
- zulumarketing/html2pdf
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.rst
- About
- Рецепты Python: преобразование из HTML и URL в PDF и PS
- Создание PDF из HTML шаблона с помощью Python
- Создаем шаблон для формирования PDF
- Создаем PDF используя pdfkit
- Категории
- Свежие записи
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
Pure Python HTML/CSS to PDF converter
License
zulumarketing/html2pdf
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.rst
HTML/CSS to PDF converter based on Python
xhtml2pdf is a html2pdf converter using the ReportLab Toolkit, the HTML5lib and pyPdf. It supports HTML 5 and CSS 2.1 (and some of CSS 3). It is completely written in pure Python so it is platform independent.
The main benefit of this tool that a user with Web skills like HTML and CSS is able to generate PDF templates very quickly without learning new technologies.
Python, virtualenv and dependencies
- Install Python 2.6.x or 2.7.x. Installation steps depends on your operating system.
- Install Pip, the python package installer:
sudo pip install virtualenv
virtualenv --distribute xhtml2pdfenv --python=python2
source xhtml2pdfenv/bin/activate
pip install -r requirements.txt
Some simple demos of how to integrate xhtml2pdf into a Python program may be found here: test/simple.py
Development for this software happend on github, and the main fork is currently at https://github.com/chrisglass/xhtml2pdf
Contributions are welcome in any format, but using github’s pull request system is very highly preferred since it makes review and integration much easier.
Two different test suites are available to assert xhtml2pdf works reliably:
- Unit tests. The unit testing framework is currently minimal, but is being improved on a daily basis (contributions welcome). They should run in the expected way for Python’s unittest module, i.e.:
nosetests --with-coverage (or your personal favorite)
Copyright 2010 Dirk Holtwick, holtwick.it
Licensed under the Apache License, Version 2.0 (the «License»); you may not use this file except in compliance with the License. You may obtain a copy of the License at
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an «AS IS» BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
About
Pure Python HTML/CSS to PDF converter
Рецепты Python: преобразование из HTML и URL в PDF и PS
Для приготовления преобразования из HTML и URL в PDF и PS нам понадобится сам python, генератор htmldoc и плагин pyhtmldoc. (Я дал ссылки на свои форки, т.к. делал некоторые изменения, которые пока не удалось пропихнуть в оригинальный репозитории. Можно также воспользоваться готовым образом.)
Для начала импортируем плагин командой
Для преобразования из HTML и URL в PDF и PS используем команды
pdf = file2pdf('file.html'.encode(), None) # преобразуем FILE в PDF ps = file2ps('file.html'.encode(), None) # преобразуем FILE в PS file2pdf('file.html'.encode(), 'file.pdf') # преобразуем FILE в PDF и сохраняем результат в файл file2ps('file.html'.encode(), 'file.pdf') # преобразуем FILE в PS в PDF и сохраняем результат в файл pdf = file2pdf(['file1.html'.encode(), 'file2.html'.encode()], None) # преобразуем несколько FILE в PDF ps = file2ps(['file1.html'.encode(), 'file2.html'.encode()], None) # преобразуем несколько FILE в PS file2pdf(['file1.html'.encode(), 'file2.html'.encode()], 'file.pdf') # преобразуем несколько FILE в PDF и сохраняем результат в файл file2ps(['file1.html'.encode(), 'file2.html'.encode()], 'file.pdf') # преобразуем несколько FILE в PS в PDF и сохраняем результат в файл pdf = html2pdf('Здравствуй, мир!'.encode(), None) # преобразуем HTML в PDF ps = html2ps('Здравствуй, мир!'.encode(), None) # преобразуем HTML в PS html2pdf('Здравствуй, мир!'.encode(), 'file.pdf') # преобразуем HTML в PDF и сохраняем результат в файл html2ps('Здравствуй, мир!'.encode(), 'file.pdf') # преобразуем HTML в PS в PDF и сохраняем результат в файл pdf = html2pdf(['Здравствуй, мир!'.encode(), 'До свидания, мир!'.encode()], None) # преобразуем несколько HTML в PDF ps = html2ps(['Здравствуй, мир!'.encode(), 'До свидания, мир!'.encode()], None) # преобразуем несколько HTML в PS html2pdf(['Здравствуй, мир!'.encode(), 'До свидания, мир!'.encode()], 'file.pdf') # преобразуем несколько HTML в PDF и сохраняем результат в файл html2ps(['Здравствуй, мир!'.encode(), 'До свидания, мир!'.encode()], 'file.pdf') # преобразуем несколько HTML в PS в PDF и сохраняем результат в файл pdf = url2pdf('https://google.com'.encode(), None) # преобразуем URL в PDF ps = url2ps('https://google.com'.encode(), None) # преобразуем URL в PS url2pdf('https://google.com'.encode(), 'file.pdf') # преобразуем URL в PDF в PDF и сохраняем результат в файл url2ps('https://google.com'.encode(), 'file.pdf') # преобразуем URL в PS в PDF и сохраняем результат в файл pdf = url2pdf(['https://google.com'.encode(), 'https://google.ru'.encode()], None) # преобразуем несколько URL в PDF ps = url2ps(['https://google.com'.encode(), 'https://google.ru'.encode()], None) # преобразуем несколько URL в PS url2pdf(['https://google.com'.encode(), 'https://google.ru'.encode()], 'file.pdf') # преобразуем несколько URL в PDF в PDF и сохраняем результат в файл url2ps(['https://google.com'.encode(), 'https://google.ru'.encode()], 'file.pdf') # преобразуем несколько URL в PS в PDF и сохраняем результат в файл
Создание PDF из HTML шаблона с помощью Python
Довольно часто возникает необходимость сгенерировать PDF файл скриптом на Python, например у меня недавно возникла такая задача:
Необходимо добавить в систему управления предприятием функционал формирования дипломов для наград сотрудников в виде PDF файлов, чтобы можно было их распечатать или послать по почте.
Порядок работы должен быть таким:
- Менеджер, через веб-форму, вводит необходимые данные (имя сотрудника, должность и т.п.);
- Далее он выбирает шаблон диплома (шаблоны заранее подготавливаются в системе);
- Получает сформированный PDF файл.
Погуглив нашел для себя несколько способов решить задачу:
1. Использовать Python библиотеку для формирования PDF, например reportlab;
2. Сначала сформировать HTML страницу с помощью какого-нибудь шаблонизатора, а потом уже конвертировать HTML в PDF.
Первый вариант мне показался сложноватым из-за форматирования, нужно будет рисовать и позиционировать каждый элемент шаблона используя код python. По этой же причине в будущем будут сложности с поддержкой шаблонов.
Я выбрал второй вариант, поскольку HTML шаблон для моей задачи был простой и не должно было возникнуть сложности в его конвертации в PDF. В качестве шаблонизатора, я использовал Jinja
Для конвертации HTML в PDF я использовал Python-PDFKit (для его работы в вашу систему необходимо установить wkhtmltopdf).
Чтобы показать пример, я максимально упрощу задачу. Пусть нам необходимо, чтобы скрипт брал имя пользователя из переменной и подставлял его в HTML шаблон, а дальше мы бы получали PDF файл с текстом «Привет »!
Для начала установим все необходимое:
Так же необходимо скачать и установить в систему wkhtmltopdf.
Для этой заметки, я устанавливать не стал, а скачал portable версию для Windows и распаковал ее в D:\wkhtmltox (этот путь понадобится в дальнейшем).
Создаем шаблон для формирования PDF
Для нашей задачи HTML шаблон будет максимально примитивный, создадим файл pdf_template.html:
Здесь name — это переменная, которую мы будем передавать в шаблон.
Теперь нужно написать код python, который сгенерирует html шаблон. Как я уже писал мы используем шаблонизатор Jinja.
from jinja2 import Environment, FileSystemLoader name = 'Александр' env = Environment(loader=FileSystemLoader('.')) template = env.get_template("pdf_template.html") pdf_template = template.render()
Сейчас в переменной pdf_template генерируется HTML шаблон:
Осталось сделать из него пдф.
Создаем PDF используя pdfkit
Осталось добавить к нашему скрипту пару строк и уже можно получить готовый пдф файл по нашему шаблону:
Сначала импортируем pdfkit:
И одной строчкой сформируем pdf:
Теперь, если выполнить скрипт, в папке появиться файл out.pdf созданный по нашему шаблону.
Поскольку я скачал portable версию wkhtmltopdf и пути к нему нет в переменной PATH, код нужно немного изменить, добавив путь к wkhtmltopdf.exe:
config = pdfkit.configuration(wkhtmltopdf=r’D:\wkhtmltox\bin\wkhtmltopdf.exe’)
pdfkit.from_string(pdf_template, ‘out.pdf’, configuration=config)
Итоговый код выглядит так:
from jinja2 import Environment, FileSystemLoader import pdfkit name = 'Александр' env = Environment(loader=FileSystemLoader('.')) template = env.get_template("pdf_template.html") pdf_template = template.render() pdfkit.from_string(pdf_template, 'out.pdf') # config = pdfkit.configuration(wkhtmltopdf=r'D:\wkhtmltox\bin\wkhtmltopdf.exe') # pdfkit.from_string(pdf_template, 'out.pdf', configuration=config)