2013-03-28 3 views
6

Вот что я сделал:Как преобразовать простой html в pdf с помощью wkhtmltopdf?

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

    <HTML> < голова > < стиля типа = "текст/CSS" > р {семейство шрифтов: без засечек;}; </стиль > </HEAD > < тело > < р > протестируем </р > </тело > </html >

  4. Ран wkhtmltopdf test.html test.pdf

  5. скопированного test.pdf на мой Рабочий стол Windows, открыл его и получил (https://docs.google.com/file/d/0B2pbsdBJxJI3MV8zby14cGk5VWs/edit?usp=sharing): enter image description here

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

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

P.S.

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

EDIT

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

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

[email protected]:~$ which wkhtmltopdf 
[email protected]:~$ /usr/bin/wkhtmltopdf 
-bash: /usr/bin/wkhtmltopdf: No such file or directory 
[email protected]:~$ 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) ... 
[email protected]:~$ l test.* 
-rw-r--r-- 1 ubuntu ubuntu 123 Mar 30 12:46 test.html 
[email protected]:~$ cat test.html 
<html> <head> <style type="text/css">p{font-family: sans-serif;};</style> </head> <body> <p>Let's Test</p> </body> </html> 
[email protected]:~$ /usr/bin/wkhtmltopdf test.html test.pdf 
wkhtmltopdf: cannot connect to X server 
[email protected]:~$ 

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. Установлен deb
  4. Произведено pdf, но все еще видны только квадраты.

Вот расшифровка:

[email protected]:~$ 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 
[email protected]:~$ 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 ... 
[email protected]:~$ ./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 
[email protected]:~$ 

EDIT3

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

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

EDIT4

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

<html> 
    <head> 
    <style type="text/css"> 
     body { 
     font-family: sans-serif; 
     } 
    </style> 
    </head> 
    <body id='body'> 
    <script> 
     document.getElementById('body').innerHTML = 'Hello world!'; 
    </script> 
    </body> 
</html> 

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

EDIT5

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

<!DOCTYPE html> 
<html> 
    <head> 
    <style type="text/css"> 
     html, body { 
       height: 100%; 
       overflow: hidden; 
     } 
    </style> 
    </head> 
    <body> 
    Hello World! 
    </body> 
</html> 

Создаваемый PDF пуст. Вот расшифровка:

[email protected]:~$ cat test2.html 
<!DOCTYPE html> 
<html> 
    <head> 
    <style type="text/css"> 
     html, body { 
       height: 100%; 
       overflow: hidden; 
     } 
    </style> 
    </head> 
    <body> 
    Hello World! 
    </body> 
</html> 
[email protected]:~$ 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 
[email protected]:~$ 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 
[email protected]:~$ 

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

EDIT6

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

Обычай версия:

[email protected]:~/wkhtmltopdf/bin$ l wkhtmltopdf 
-rwxr-xr-x 1 ubuntu ubuntu 35020224 Mar 31 22:26 wkhtmltopdf 
[email protected]:~/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) 
[email protected]:~/wkhtmltopdf/bin$ 

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

[email protected]:/usr/bin$ l wkhtmltopdf 
-rwxr-xr-x 1 root root 233512 May 7 2011 wkhtmltopdf 
[email protected]:/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) 
[email protected]:/usr/bin$ 

EDIT7

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

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

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

EDIT8

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

+0

На Linux Mint я установил wkhtmltopdf менеджером пакетов, а затем побежал ваш test.html в результате PDF был Pefect. Для меня результат на вашем экране выглядит как проблема с кодировкой/шрифтом. –

+0

Пожалуйста, см. Мой EDIT. – mark

+0

Странно, версия, которую я использую на Монетном дворе, не нужна X. Возможно, это поможет вам: http://wenlong.wordpress.com/2011/04/19/wkhtmltopdf-cannot-connect-to-x-server/ Что касается скомпилированная версия, вы прочитали это? http://stackoverflow.com/questions/4627802/square-issue-on-wkhtmltopdf –

ответ

0

Попробуйте установить декларацию кодировки в вашем HTML головной теге так:

<head> 
    <meta charset="utf-8"> 
    ... 
</head> 
Смежные вопросы