Как преобразовать простой html в pdf с помощью wkhtmltopdf?

Вот что я сделал:

  1. Создал виртуальную машину linux в облаке Amazon.
  2. Следуйте инструкциям https://code.google.com/p/wkhtmltopdf/wiki/compilation, чтобы загрузить и скомпилировать исходный код wkhtmltopdf-qt и wkhtmltopdf. В итоге у меня есть статическая assembly wkhtmltopdf.
  3. Взял этот html ( http://jsfiddle.net/mark69_fnd/8CtjB/ ):

    p {font-family: sans-serif;};

    Тестируем

  4. Ran wkhtmltopdf test.html test.pdf

  5. Скопировал test.pdf на мой рабочий стол Windows, открыл его и получил ( https://docs.google.com/file/d/0B2pbsdBJxJI3MV8zby14cGk5VWs/edit?usp=sharing ): введите описание изображения здесь

Я внимательно следил за руководством, параметры конфигурации qt были взяты из ../wkhtmltopdf/static_qt_conf_base и ../wkhtmltopdf/static_qt_conf_linux как предлагает руководство.

Излишне говорить, что я немного разочарован результатом. Может ли кто-нибудь объяснить мне, что я делаю неправильно?

PS

На самом деле мне нужно преобразовать гораздо более сложный HTML, но нет смысла говорить об этом, когда я не могу преобразовать тривиальный.

РЕДАКТИРОВАТЬ

Я хочу подчеркнуть, что я не работаю в Linux, я только открываю терминал для размещения в Amazon Linux. Значит, у меня нет среды X11.

Это то, что я получаю, когда пытаюсь использовать предопределенный пакет wkhtmltopdf:

 ubuntu@ip-10-245-78-162:~$ which wkhtmltopdf ubuntu@ip-10-245-78-162:~$ /usr/bin/wkhtmltopdf -bash: /usr/bin/wkhtmltopdf: No such file or directory ubuntu@ip-10-245-78-162:~$ sudo apt-get install wkhtmltopdf Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: wkhtmltopdf 0 upgraded, 1 newly installed, 0 to remove and 120 not upgraded. Need to get 0 B/104 kB of archives. After this operation, 303 kB of additional disk space will be used. Selecting previously unselected package wkhtmltopdf. (Reading database ... 36679 files and directories currently installed.) Unpacking wkhtmltopdf (from .../wkhtmltopdf_0.9.9-3_amd64.deb) ... Processing triggers for man-db ... Setting up wkhtmltopdf (0.9.9-3) ... ubuntu@ip-10-245-78-162:~$ l test.* -rw-r--r-- 1 ubuntu ubuntu 123 Mar 30 12:46 test.html ubuntu@ip-10-245-78-162:~$ cat test.html   p{font-family: sans-serif;};   

Let's Test

ubuntu@ip-10-245-78-162:~$ /usr/bin/wkhtmltopdf test.html test.pdf wkhtmltopdf: cannot connect to X server ubuntu@ip-10-245-78-162:~$

EDIT2

  1. Я загрузил ftp://rpmfind.net/linux/fedora/linux/development/rawhide/x86_64/os/Packages/u/urw-fonts-2.4-14.fc19.noarch.rpm
  2. Следуйте инструкциям из http://www.howtogeek.com/howto/ubuntu/install-an-rpm-package-on-ubuntu-linux/, чтобы преобразовать число оборотов в формат deb.
  3. Установлен деб
  4. Произведенный pdf, но все же видя только квадраты.

Вот стенограмма:

 ubuntu@ip-10-245-78-162:~$ sudo alien urw-fonts-2.4-14.fc19.noarch.rpm --scripts warning: urw-fonts-2.4-14.fc19.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID fb4b18e6: NOKEY warning: urw-fonts-2.4-14.fc19.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID fb4b18e6: NOKEY warning: urw-fonts-2.4-14.fc19.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID fb4b18e6: NOKEY warning: urw-fonts-2.4-14.fc19.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID fb4b18e6: NOKEY warning: urw-fonts-2.4-14.fc19.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID fb4b18e6: NOKEY warning: urw-fonts-2.4-14.fc19.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID fb4b18e6: NOKEY warning: urw-fonts-2.4-14.fc19.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID fb4b18e6: NOKEY warning: urw-fonts-2.4-14.fc19.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID fb4b18e6: NOKEY warning: urw-fonts-2.4-14.fc19.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID fb4b18e6: NOKEY warning: urw-fonts-2.4-14.fc19.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID fb4b18e6: NOKEY warning: urw-fonts-2.4-14.fc19.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID fb4b18e6: NOKEY warning: urw-fonts-2.4-14.fc19.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID fb4b18e6: NOKEY warning: urw-fonts-2.4-14.fc19.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID fb4b18e6: NOKEY warning: urw-fonts-2.4-14.fc19.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID fb4b18e6: NOKEY warning: urw-fonts-2.4-14.fc19.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID fb4b18e6: NOKEY warning: urw-fonts-2.4-14.fc19.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID fb4b18e6: NOKEY warning: urw-fonts-2.4-14.fc19.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID fb4b18e6: NOKEY urw-fonts_2.4-15_all.deb generated ubuntu@ip-10-245-78-162:~$ sudo dpkg -i urw-fonts_2.4-15_all.deb Selecting previously unselected package urw-fonts. (Reading database ... 38529 files and directories currently installed.) Unpacking urw-fonts (from urw-fonts_2.4-15_all.deb) ... Setting up urw-fonts (2.4-15) ... Processing triggers for fontconfig ... ubuntu@ip-10-245-78-162:~$ ./wkhtmltopdf/bin/wkhtmltopdf test.html test.pdf Loading pages (1/6) Counting pages (2/6) Resolving links (4/6) Loading headers and footers (5/6) Printing pages (6/6) Done ubuntu@ip-10-245-78-162:~$ 

EDIT3

Я установил пакет xvfb-run, и теперь через него можно запустить версию по умолчанию (/ usr / bin / wkhtmltopdf). Действительно, он может преобразовать простой файл test.html в pdf, однако он не может сделать это для сложной html-страницы с кодом Javascript. Кажется, что / usr / bin / wkhtmltopdf не может запустить какой-либо код Javascript на конвертируемой странице.

Я все еще озадачен, почему скомпилированная версия не работает.

EDIT4

Я был несправедлив с версией wkhtmltopdf по умолчанию. Он способен понимать Javascript на странице, он успешно конвертирует следующий html:

    body { font-family: sans-serif; }     document.getElementById('body').innerHTML = 'Hello world!';    

Я попытаюсь понять, почему это происходит с реальной страницей, но я не знаю, как я могу ее устранить, кроме как попытаться получить минимальную страницу с ошибкой, выбросив fragmentы оригинальной.

EDIT5

ОК, вот минимальный пример, который не работает со стандартной версией wkhtmltopdf:

     html, body { height: 100%; overflow: hidden; }    Hello World!   

Созданный pdf-файл пуст. Вот стенограмма:

 ubuntu@ip-10-245-78-162:~$ cat test2.html     html, body { height: 100%; overflow: hidden; }    Hello World!   ubuntu@ip-10-245-78-162:~$ xvfb-run /usr/bin/wkhtmltopdf test2.html test2.pdf ; l test2.pdf Loading page (1/2) Printing pages (2/2) Done -rw-r--r-- 1 ubuntu ubuntu 1266 Mar 31 11:16 test2.pdf ubuntu@ip-10-245-78-162:~$ cat test2.html |sed 6d | xvfb-run /usr/bin/wkhtmltopdf - test2.pdf ; l test2.pdf Loading page (1/2) Printing pages (2/2) Done -rw-r--r-- 1 ubuntu ubuntu 4284 Mar 31 11:16 test2.pdf ubuntu@ip-10-245-78-162:~$ 

Обратите внимание, что удаление 6-й строки (высота: 100%;) изменяет размер созданного pdf-файла.

EDIT6

Пользовательская версия связана статически, тогда как по умолчанию она зависит от нескольких общих библиотек WebKit:

Пользовательская версия:

 ubuntu@ip-10-245-78-162:~/wkhtmltopdf/bin$ l wkhtmltopdf -rwxr-xr-x 1 ubuntu ubuntu 35020224 Mar 31 22:26 wkhtmltopdf ubuntu@ip-10-245-78-162:~/wkhtmltopdf/bin$ ldd !$ ldd wkhtmltopdf linux-vdso.so.1 => (0x00007fff195ff000) libXrender.so.1 => /usr/lib/x86_64-linux-gnu/libXrender.so.1 (0x00007fefc06db000) libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007fefc03a7000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fefc01a2000) librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fefbff9a000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fefbfd7d000) libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fefbfa7c000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fefbf780000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fefbf56a000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fefbf1aa000) /lib64/ld-linux-x86-64.so.2 (0x00007fefc08ef000) libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007fefbef8c000) libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007fefbed88000) libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007fefbeb82000) ubuntu@ip-10-245-78-162:~/wkhtmltopdf/bin$ 

Теперь версия по умолчанию:

 ubuntu@ip-10-245-78-162:/usr/bin$ l wkhtmltopdf -rwxr-xr-x 1 root root 233512 May 7 2011 wkhtmltopdf ubuntu@ip-10-245-78-162:/usr/bin$ ldd wkhtmltopdf linux-vdso.so.1 => (0x00007fff031ff000) libQtWebKit.so.4 => /usr/lib/x86_64-linux-gnu/libQtWebKit.so.4 (0x00007f28a33bc000) libQtGui.so.4 => /usr/lib/x86_64-linux-gnu/libQtGui.so.4 (0x00007f28a26ee000) libQtNetwork.so.4 => /usr/lib/x86_64-linux-gnu/libQtNetwork.so.4 (0x00007f28a23a1000) libQtCore.so.4 => /usr/lib/x86_64-linux-gnu/libQtCore.so.4 (0x00007f28a1ecf000) libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f28a1bcf000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f28a19b8000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f28a15f9000) libsqlite3.so.0 => /usr/lib/x86_64-linux-gnu/libsqlite3.so.0 (0x00007f28a1356000) libXrender.so.1 => /usr/lib/x86_64-linux-gnu/libXrender.so.1 (0x00007f28a114b000) libgstapp-0.10.so.0 => /usr/lib/x86_64-linux-gnu/libgstapp-0.10.so.0 (0x00007f28a0f3f000) libgstinterfaces-0.10.so.0 => /usr/lib/x86_64-linux-gnu/libgstinterfaces-0.10.so.0 (0x00007f28a0d2d000) libgstpbutils-0.10.so.0 => /usr/lib/x86_64-linux-gnu/libgstpbutils-0.10.so.0 (0x00007f28a0b09000) libgstvideo-0.10.so.0 => /usr/lib/x86_64-linux-gnu/libgstvideo-0.10.so.0 (0x00007f28a08ed000) libgstbase-0.10.so.0 => /usr/lib/x86_64-linux-gnu/libgstbase-0.10.so.0 (0x00007f28a069a000) libgstreamer-0.10.so.0 => /usr/lib/x86_64-linux-gnu/libgstreamer-0.10.so.0 (0x00007f28a03b2000) libgobject-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 (0x00007f28a0163000) libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f289fe6e000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f289fc50000) libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f289f91c000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f289f620000) libfontconfig.so.1 => /usr/lib/x86_64-linux-gnu/libfontconfig.so.1 (0x00007f289f3e9000) libaudio.so.2 => /usr/lib/x86_64-linux-gnu/libaudio.so.2 (0x00007f289f1d1000) libpng12.so.0 => /lib/x86_64-linux-gnu/libpng12.so.0 (0x00007f289efa9000) libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f289ed91000) libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007f289eaf5000) libSM.so.6 => /usr/lib/x86_64-linux-gnu/libSM.so.6 (0x00007f289e8ed000) libICE.so.6 => /usr/lib/x86_64-linux-gnu/libICE.so.6 (0x00007f289e6d2000) libXi.so.6 => /usr/lib/x86_64-linux-gnu/libXi.so.6 (0x00007f289e4c3000) libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007f289e2b2000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f289e0ad000) librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f289dea5000) /lib64/ld-linux-x86-64.so.2 (0x00007f28a517e000) liborc-0.4.so.0 => /usr/lib/x86_64-linux-gnu/liborc-0.4.so.0 (0x00007f289dc29000) libgmodule-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgmodule-2.0.so.0 (0x00007f289da25000) libxml2.so.2 => /usr/lib/x86_64-linux-gnu/libxml2.so.2 (0x00007f289d6ca000) libffi.so.6 => /usr/lib/x86_64-linux-gnu/libffi.so.6 (0x00007f289d4c1000) libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f289d284000) libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f289d065000) libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f289ce3b000) libXt.so.6 => /usr/lib/x86_64-linux-gnu/libXt.so.6 (0x00007f289cbd5000) libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f289c9d1000) libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007f289c7cc000) libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f289c5c5000) ubuntu@ip-10-245-78-162:/usr/bin$ 

EDIT7

Ребята, я не понимаю, как работает wkhtmltopdf для вас. Я начал с нуля, полностью:

  1. Создал совершенно новый микро-экземпляр Ubuntu Amazon (бесплатный уровень)
  2. Обновление sudo apt-get
  3. Обновление sudo apt-get
  4. sudo apt-get install libx11-dev
  5. sudo apt-get install libfontconfig1-dev
  6. wget https://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.11.0_rc1-static-amd64.tar.bz2
  7. tar xjf wkhtmltopdf-0.11.0_rc1-static-amd64.tar.bz2
  8. Создал test2.html с содержимым из EDIT5 (см. Стенограмму EDIT5 )
  9. Ran wkhtmltopdf-amd64 на test2.html. Полученный pdf-файл пуст!
  10. Удалите строку 6 или 7 из test2.html (ширина или переполнение CSS-свойства), и вдруг это сработает!

Может ли кто-нибудь повторить мои шаги и подтвердить это?

EDIT8

Установленный CentOS 6.4 в VMWare VM на моем ноутбуке. Те же результаты. whtmltopdf не работает над вышеупомянутым тривиальным файлом html.

Попробуйте установить объявление charset в своем теге html head следующим образом:

   ...