2013-03-28 13 views
6

Oto co zrobiłem:Jak przekonwertować prosty html na pdf za pomocą wkhtmltopdf?

  1. Utworzony linux maszynę wirtualną w chmurze Amazon.
  2. Wykonaj instrukcje od https://code.google.com/p/wkhtmltopdf/wiki/compilation, aby pobrać i skompilować kod źródłowy wkhtmltopdf-qt i wkhtmltopdf. W końcu mam statyczną kompilację z wkhtmltopdf.
  3. Trwało to HTML (http://jsfiddle.net/mark69_fnd/8CtjB/):

    <html> < głowica > < styl type = "text/css" > P {czcionki Rodzina: bezszeryfowej;}; </style > </head > < ciało > <p> Przetestujmy </p > </body > </html >

  4. Ran wkhtmltopdf test.html test.pdf

  5. Skopiowane test.pdf do mojego Pulpit systemu Windows, otworzył go i dostał (https://docs.google.com/file/d/0B2pbsdBJxJI3MV8zby14cGk5VWs/edit?usp=sharing): enter image description here

I po instrukcji bliżej, qt opcje konfiguracyjne pobrano z ../wkhtmltopdf/static_qt_conf_base i ../wkhtmltopdf/static_qt_conf_linux jak sugeruje prowadnicy.

Nie trzeba dodawać, że jestem nieco rozczarowany wynikiem. Czy ktoś może mi wyjaśnić, co robię źle?

P.S.

W rzeczywistości muszę przekonwertować znacznie bardziej złożony kod HTML, ale nie ma sensu o tym mówić, gdy nie uda mi się przekonwertować błaha.

EDIT

pragnę podkreślić, że nie działa na Linux, tylko otworzyć terminal do Amazon gospodarzem Linuksa. Co oznacza, nie mam środowiska X11.

To co mam, gdy próbuję przy użyciu predefiniowanego pakiet 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. Pobrałem ftp://rpmfind.net/linux/fedora/linux/development/rawhide/x86_64/os/Packages/u/urw-fonts-2.4-14.fc19.noarch.rpm
  2. następnie instrukcje od http://www.howtogeek.com/howto/ubuntu/install-an-rpm-package-on-ubuntu-linux/ do zamiany rpm format deb.
  3. Zainstalowano deb
  4. Wyprodukowano w formacie PDF, ale nadal widać tylko kwadraty.

Oto zapis:

[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

Mam zainstalowany pakiet Xvfb prowadzony i teraz wersję domyślne (/ usr/bin/wkhtmltopdf) można uruchomić poprzez to. Rzeczywiście, jest w stanie przekonwertować prosty test.html na pdf, jednak nie robi tego dla skomplikowanej strony html z kodem JavaScript. Wygląda na to, że/usr/bin/wkhtmltopdf nie jest w stanie uruchomić żadnego kodu JavaScript na konwertowanej stronie.

Nadal jestem zdziwiony, dlaczego skompilowana wersja nie działa.

EDIT4

Byłem niesprawiedliwy z wersją domyślną wkhtmltopdf. Jest zdolny do zrozumienia Javascript na stronie, to z powodzeniem przetwarza następujący kod 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> 

postaram się zrozumieć, dlaczego to nie z prawdziwej strony, ale nie wiem, jak mogę rozwiązać go z wyjątkiem próbując uzyskać minimalną wadliwą stronę, wyrzucając kawałki oryginalnego.

EDIT5

OK, tutaj jest minimalny przykład, który nie działa z wersją domyślną wkhtmltopdf:

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

Utworzona pdf jest pusty. Oto zapis:

[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]:~$ 

Zauważ, jak usunięcie szóstej linii (wysokość: 100%;) zmienia rozmiar utworzonego pliku pdf.

EDIT6

Wersja zwyczaj związany jest statycznie, podczas gdy domyślny zależy sporo z WebKit biblioteki współdzielone: ​​

Zwyczaj wersja:

[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$ 

Teraz domyślna wersja:

[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

Ludzie, nie rozumiem, jak działa wkhtmltopdf dla Ciebie.Zacząłem od podstaw, łącznie:

  1. Utworzony nowy Ubuntu Amazon mikro instancji (free tier)
  2. sudo apt-get update
  3. sudo apt-get upgrade
  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. smołę xjf wkhtmltopdf-0.11.0_rc1-Static-amd64.tar.bz2
  8. Utworzono test2.html z zawartością od EDIT5 (patrz EDIT5 transkrypt)
  9. Ran wkhtmltopdf-amd64 na test2.html. Wyprodukowany plik pdf jest pusty!
  10. Usuń linię 6 lub 7 z test2.html (szerokość lub przepełnienie CSS) i nagle działa!

Czy ktoś może odtworzyć moje kroki i potwierdzić?

EDIT8

zainstalowana CentOS 6.4 w VMWare VM na moim laptopie. Takie same wyniki. wkhtmltopdf nie działa na wyżej wymienionym trywialnym pliku html.

+0

Na Linux Mint Mam zainstalowany wkhtmltopdf przez menadżera pakietów, a następnie prowadził swoją test.html Powstały pdf był doskonalym. Dla mnie wynik na ekranie wygląda na problem z kodowaniem/czcionką. –

+0

Proszę zobaczyć moje EDYCJE. – mark

+0

Dziwne, wersja, której używam w Mint, nie potrzebuje X. Być może to pomaga: http://wenlong.wordpress.com/2011/04/19/wkhtmltopdf-cannot-connect-to-x-server/ Odnośnie problem z wersją kompilowaną, czy przeczytałeś to? http://stackoverflow.com/questions/4627802/square-issue-on-wkhtmltopdf –

Odpowiedz

0

Spróbuj ustawić deklarację kodowania znaków w tagu głowy html tak:

<head> 
    <meta charset="utf-8"> 
    ... 
</head> 
Powiązane problemy