1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Wkhtmltopdf / wkhtmltopdf

wkhtmltopdf 0.2

pip install wkhtmltopdf Copy PIP instructions

Released: Apr 19, 2011

Simple python wrapper for wkhtmltopdf

Navigation

Project links

Statistics

View statistics for this project via Libraries.io, or by using our public dataset on Google BigQuery

License: BSD License (BSD)

Author: Qoda

Maintainers

Classifiers

  • Development Status
    • 4 — Beta
  • Intended Audience
    • Developers
  • License
    • OSI Approved :: BSD License
  • Operating System
    • OS Independent
  • Programming Language
    • Python
  • Topic
    • Internet :: WWW/HTTP :: Dynamic Content

Project description

python-wkhtmltopdf

A simple python wrapper for the wkhtmltopdf lib (http://code.google.com/p/wkhtmltopdf/) with flash support.

Requirements

System:

  • Xvfd
  • wkhtmltopdf
  • flashplugin-nonfree
  • python 2.5+

Installation

wkhtmltopdf

python-wkhtmltopdf

Usage

Simple Usage::

Use from method:

Use from commandline (installed):

Use the api (installed):

Required Arguments:

  • url — the url to convert to pdf
  • output_file — the pdf file that you want to create

Optional Arguments:

  • screen_resolution (default: [1024, 768])
  • color_depth (default: 24 (bit))
  • flash_plugin (default: True)
  • disable_javascript (default: False)
  • delay (default: 0 (millisecs))
  • orientation (default: Portrait)
  • dpi (default: 100)
  • no_background (default: False)
  • grayscale (default: False)
  • http_username (default: None)
  • http_password (default: None)
  • header_html (default: None)
  • footer_html (default: None)

Authors:

  • Jonathan Bydendyk (jpbydendyk @ gmail . com)

Project details

Project links

Statistics

View statistics for this project via Libraries.io, or by using our public dataset on Google BigQuery

License: BSD License (BSD)

Author: Qoda

Maintainers

Classifiers

  • Development Status
    • 4 — Beta
  • Intended Audience
    • Developers
  • License
    • OSI Approved :: BSD License
  • Operating System
    • OS Independent
  • Programming Language
    • Python
  • Topic
    • Internet :: WWW/HTTP :: Dynamic Content

Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you’re not sure which to choose, learn more about installing packages.

Генерируем PDF-файлы в веб-проекте: программа wkhtmltopdf

При работе над веб-проектом иногда возникает необходимость генерировать PDF-файлы с большими таблицами: прайс-листы на тысячи позиций. Нашлись разные библиотеки для генерации PDF-файла из PHP-скрипта:

• FPDF
• MPDF — основанная на FPDF библиотека, позволяющая генерировать pdf-файл из любого html-кода
• DOMPDF
• TCPDF

и многие разные другие библиотеки. Наиболее мощной и подходящей, к тому же, изначально корректно работающей с кириллицей, оказалась библиотека MPDF, если бы не критичный в нашем случае недостаток: большие таблицы и вообще большие файлы крайне медленно генерировались. Более того, часто генерация не происходила совсем, а скрипт останавливался с ошибкой 504.

Дальнейший поиск помог найти программу wkhtmltopdf. Сайт программы: http://wkhtmltopdf.org.

В отличие от php-библиотек, это серверная программа, распространяемая в том числе в виде пакетов и исполняемых файлов для linux, windows и других операционных систем. Программа принимает html-код (в виде веб-адреса, пути к файлу либо строки кода) и генерирует на его основе pdf-файл на сервере.

Предварительный опыт показал, что на локальном сервере XAMPP под Windows огромная html-таблица на 300-500 страниц преобразуется в pdf-файл за 1-2 секунды!

Установка wkhtmltopdf на CentOs 6
Для работы программе необходим webkit и qt.

Итак, установим требуемое окружение и программу на сервер. На нашем сервере установлена CentOs 6. Зайдем на сервер с правами root и выполним следующие команды.

Получим rpm-пакет программы wkhtmltopdf по ссылке с сайта разработчика и установим ее на рабочем сервере:

wget download.gna.org/wkhtmltopdf/0.12/0.12.2.1/wkhtmltox-0.12.2.1_linux-centos6-i386.rpm
yum —nogpgcheck localinstall wkhtmltox-0.12.2.1_linux-centos6-i386.rpm

Все зависимости пакетов должны автоматически провериться и удовлетвориться. Если окружение по каким-то причинам не установилось, используйте команды:

yum install urw-fonts libXext openssl-devel libXrender
yum install xorg-x11-fonts-cyrillic.noarch xorg-x11-fonts-misc.noarch xorg-x11-fonts-truetype.noarch xorg-x11-fonts-100dpi.noarch xorg-x11-fonts-75dpi.noarch fonts-ISO8859-2.noarch fonts-ISO8859-2-100dpi.noarch fonts-ISO8859-2-75dpi.noarch freefont.noarch

До недавнего времени программа не предоставлялась в виде rpm-пакета, и приходилось копировать бинарный файл и вручную устанавливать все необходимые пакеты.

Использование wkhtmltopdf на CentOs 6
Общий формат запуска программы такой:

Читать еще:  Moorhuhn Soccer: Футбол куропатокигры

Кроме того, программа позволяет автоматически встраивать шапку и подвал документа из отдельных html-файлов. Для этого синтаксис такой:

wkhtmltopdf —header-html —footer-html

Также среди опций запуска программы — настраиваемый размер полей получаемого pdf-файла. В верхнее и нижнее поле программа подставляет шапку и подвал:

wkhtmltopdf —margin-top 35mm —margin-bottom 27mm —margin-left 10mm —margin-right 10mm —header-html —footer-html

В этом примере:
• верхнее поле: 35 мм
• нижнее поле: 27 мм
• левое, правое поля: по 10мм

Приведу также пример кода подвала. В нашем случае автоматически формируются и подставляются в подвал номера страниц. Таким образом, в нашем документе автоматически пронумеруются страницы:

Также среди полезных опций запуска программы:

— encoding – указание кодировки исходного html-файла, например:
—encoding windows-1251

— page-size – указание формата страницы, например:
—page-size A4

— orientation – ориентация страницы, например:
—orientation Landscape

В нашем веб-проекте на php-странице, формирующей pdf-файл, используется такой php-код:
$tmp=time();

$f=fopen(ABSPATH.’/tmp/’.$tmp.’.html’,’w’);
fputs($f, $llg);
fclose($f);

Wkhtmltopdf — умная утилита для конвертирования веб-страниц в PDF в Linux

Оригинал: Wkhtmltopdf – A Smart Tool to Convert Website HTML Page to PDF in Linux
Автор: Ravi Saive
Дата публикации: 28 января 2017 года
Перевод: А. Кривошей
Дата перевода: февраль 2018 г.

Wkhtmltopdf — простая и эффективная утилита командной строки с открытым исходным кодом, которая позволяет пользователю конвертировать любую веб-страницу в документ PDF или изображение (jpg, png и т. д.).

Wkhtmltopdf написана на C ++ и распространяется под лицензией GNU/GPL (General Public License). Она использует механизм рендеринга WebKit для преобразования веб-страниц в PDF без потери качества. Это действительно очень полезное и заслуживающее доверия решение для создания и хранения снимков веб-страниц в режиме реального времени.

Особенности Wkhtmltopdf

— открытый исходный код, кроссплатформенная утилита;
— преобразование любых веб-страниц в файлы PDF с использованием движка WebKit;
— опции для добавления верхних и нижних колонтитулов;
— опция генерации таблицы содержимого (TOC);
— обеспечивает конвертирование в пакетном режиме;
— поддержка PHP или Python через привязки к libwkhtmltox.

В этой статье мы покажем вам, как установить программу Wkhtmltopdf в Linux из исходного кода.

Установка Evince (программа для просмотра PDF)

Давайте сначала установим программу evince для просмотра PDF в Linux.

Скачивание исходного кода Wkhtmltopdf

Загрузите исходные коды wkhtmltopdf для вашей архитектуры Linux, с помощью команды Wget, также вы можете загрузить последнюю версию на странице загрузки wkhtmltopdf.

Для 64-битных систем

Для 32-битных систем

Установка Wkhtmltopdf в Linux

Распакуйте файлы в текущую рабочую директорию с помощью команды tar.

В 64-битной системе

В 32-битной системе

Установите wkhtmltopdf в директорию /usr/bin, чтобы ее можно было запускать из любого места.

Как использовать Wkhtmltopdf?

Здесь мы рассмотрим, как конвертировать HTML-страницы в PDF, верифицировать информацию и просматривать созданные файлы с помощью программы evince.

Конвертирование HTML-страницы в формат PDF

Для преобразования веб-страницы в PDF, выполните приведенную ниже команду. Он конвертирует указанную веб-страницу в файл 10-Sudo-Configurations.pdf в текущем рабочем каталоге.

Проверка сгенерированного файла PDF

Для того, чтобы проверить, что файл создан корректно, введите команду:

Просмотр информации о сгенерированном файле PDF

Чтобы просмотреть информацию о созданном файле, воспользуйтесь следующей командой:

Просмотр сгенерированного файла PDF

Давайте взглянем на содержимое созданного нами файла с помощью программы evince:

Пример созданного файла

В моей Linux Mint 17 выглядит отлично.

Создание таблицы содержимого (Table Of Content) файла PDF

Для создания таблицы содержимого PDF-файла используется опция toc.

Для проверки TOC созданного файла снова используем программу evince:

Дополнительную информацию об использовании и опциях Wkhtmltopdf можно получить с помощью команды help:

Rendering HTML into PDF using WKHTMLTOPDF

Rob Ferguson
Mar 30

Introduction

The PDF filetype is one of the most popular formats for sharing and providing content on both the personal and professional sides of computing. It has many advantages such as being:

  • self-contained — able to share cross-platform with a single file while maintaining desired look and feel
  • compact — able to compress and share large documents
  • securable — using watermarks, passwords or encryption
  • common — this format has become ubiquitous making it easy to share content.

There are a variety of reasons why someone would want a copy of a webpage in the form of a PDF. A few that you may be familiar with already are:

  • printable receipts from online purchases
  • generating invoices from online tools
  • saving a hard copy «for your records» from a bank transaction or goverment website
  • printable versions of online content for offline viewing

Generating PDF versions of existing web pages or exporting them such that they are styled similarly to web pages has often been a difficult task. In the past we’ve set this up for clients wanting a «save to pdf» version of a page. Depending on the complexity of the page in question, this has been achievable. There are plenty of libraries available to get this task done, especially in the PHP world. This sort of task isn’t something we often do though.

Читать еще:  Mortal Kombat 11 — краткое содержание

The workflow usually starts by knowing you need to export an existing page to PDF, or create one based on an existing page. Now comes the time to pick a library to get this done. After some google catch up on some of the available solutions, you now need to settle on one. Most of the websites hosting each product don’t really describe or give examples of results or how to get them within their documentation (if there is any). Relying on stackoverflow posts can also be hit and miss as each answer is different in their opinion. One person may say to use one product as «it works for me», another person may swear by some other library.

The general consensus in the past suggested that exporting to PDF from the web is like dealing with print stylesheets. The expectations you have for the output can’t be that of the modern browser but more simplified in it’s features and construction. This is still sort of true today still. Producing desirable results can depend on

  • system fonts available
  • integrity of incoming HTML markup
  • features needed such as floating images or long tables that span multiple pages
  • other nice to haves like a cover page, repeating header/footer areas and a table of contents

Choosing the right tool

Knowing what is going into the PDF, you’ll also have to rely on the quality of the tool’s output you’re using and whether it provides all the requisite features. This can make for a headache when trying to come up with a workable solution.

Based on feedback seen on the web for these tools, the feeling seemed the same most of the time. Below is a comment taken from a discussion about pdf generators on stack overflow.

«Well if you want to find a perfect XHTML+CSS to PDF converter library, forget it. It’s far from possible. Because it’s just like finding a perfect browser (XHTML+CSS rendering engine). Do we have one? IE or FF?

I have had some success with DOMPDF. The thing is that you have to modify your HTML+CSS code to go with the way the library is meant to work. Other than that, I have pretty good results.»

Our experience has been similar with using something called DOMPDF. Based on the many different solutions that were tried, this was the best. A few clients were able to get what they needed from it in the past and so recently we tried using it again on another bigger project. Unfortunately this time it had been pushed to its limit and we were unable to continue using it in the existing development. One example of this happened when trying to output a long table that spanned across multiple pages. We noticed that the rowspans in the table were breaking once reaching a new page. It turned out that DOMPDF has some open issues surrounding this problem in GitHub and users were having varied success with trying to do the same. Having reached 90% of what we needed, there was still more to be desired in terms of matching output to what we were seeing in the browser. This prompted a new search for solving the same problem in a different way.

Traditionally when googling for an answer to this problem, at least in the PHP world, you get back a list comprised of tools including but not limited to the following (some which are defunct):

  • tcpdf
  • dompdf
  • pdflib
  • htmldoc
  • mpdf
  • fpdf

Thankfully we came across a way better solution by using a product called WKHTMLTOPDF. Here’s how they describe it on their homepage:

wkhtmltopdf and wkhtmltoimage are open source (LGPLv3) command line tools to render HTML into PDF and various image formats using the Qt WebKit rendering engine. These run entirely «headless» and do not require a display or display service.

wkhtmltopdf is also used within popular PDF generator tools like PHP’s Snappy, Ruby’s wicked pdf and pdfkit.

Basically it’s a command line tool with binaries available for Windows, OS X and Linux flavors. Our needs were to run it on linux and only for generating PDF’s. It can also generate images as advertised but the focus here is solely on PDF’s. To get it running with images you’ll also need to have additional image software packages installed on your machine for it to work.

Читать еще:  Игра 76097 Школа волшебства; 120 фокусов

Getting started with WKHTMLTOPDF

You can just install this using your package manager, but it’ll likely be using an older version. It’s best to get it right off the wkhtmltopdf website.

Then, for Linux, install the dependent packages as mentioned on the above page.

install using apt

install using yum

Now you should be able to test it out.

The above will give you google’s homepage. Further testing with more complex websites will show you that while doing a good job, it’s still not the same as what you’d get in a real browser. The other thing I noticed, which probably won’t be an issue when just printing text documents, is that this tool will generally give you the mobile view of the website you’re capturing.

There is a setting that will expand the viewport size so you can get closer to a desktop view if needed:

but even then you’re still using a landscaped document. Further reading in the issue queue at the GitHub repo for this project suggests what’s happening:

If you look at the documentation of the —viewport-size option, it states «Set viewport size if you have custom scrollbars or css attribute overflow to emulate window size» — it does not say anything of the screen resolution.

On Windows, the screen resolution appears to be the actual screen resolution. On Linux, because we have to patch QT to get it running in «headless» mode the screen size is hardcoded to 800×600. Even though screen resolution could be anything, the window (or viewport size) can be changed — which is what the option controls.

If you do want to change the screen resolution, you’ll have to run it under xvfb and use the —use-xserver option.

All that being said you’re probably not going to want to use this tool to specifically screen grab websites. But it’s important to understand it’s limitations in case your custom HTML is coming out strange maybe due to a screen size issue.

Adding a PHP wrapper

The last thing we’ll mention is the use of a wrapper class around this CLI tool to make it easier to use in a PHP script. The one we’ve chosen is called «phpwkhtmltopdf»

It provides an API to control the binary instead of having to call it directly from the PHP script using the exec() function as an example. It also simplifies things so you don’t have to keep track of a long command, but instead build out the options and then run it in a few lines. To get started with it is fairly simple since it’s also a composer package:

then a simple page example would look like this:

There are many different options for wkhtmltopdf that can be used to build out the file. Below is an example we’ve used to build out a file containing

  • a custom footer with page numbering
  • a cover page
  • custom page options for footer spacing, encoding and page delay

Note I’m also using the binary option to point at the downloaded file as I haven’t put it into the system path or installed it via a package manager to get a similar setup.

That translates into the below command, as seen when calling the getCommand() method:

There is another similar wrapper available called «Snappy» which also uses wkhtmltopdf. Folks in the Laravel world may know this one better as there is a wrapper for it available.

Conclusion

While there is no silver bullet for converting to print, knowing a tool like wkhtmltopdf exists is a real stepping stone in trying to solve the problem of achieving good results from PDF generation. For most cases, as long as we can generate HTML without it breaking across pages, and can have some common features like cover pages and basic styling, that will get you most of the way there, if not completely using this tool. No, it doesn’t do pixel perfection like when viewing complex layouts in a browser. At that point though it may be worth it to look at a dedicated publishing suite to accomplish that goal, separate from the website.

Источники:

http://pypi.org/project/wkhtmltopdf/

http://habr.com/ru/post/266571/

http://rus-linux.net/MyLDP/consol/Smart_Tool_to_Convert_HTML_to_PDF.html

http://industrialagency.ca/blog/rendering-html-into-pdf-using-wkhtmltodf

Ссылка на основную публикацию
Статьи c упоминанием слов:
Adblock
detector