Oto co zrobiłem:Jak przekonwertować prosty html na pdf za pomocą wkhtmltopdf?
- Utworzony linux maszynę wirtualną w chmurze Amazon.
- 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.
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 >
Ran
wkhtmltopdf test.html test.pdf
- Skopiowane test.pdf do mojego Pulpit systemu Windows, otworzył go i dostał (https://docs.google.com/file/d/0B2pbsdBJxJI3MV8zby14cGk5VWs/edit?usp=sharing):
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
- Pobrałem ftp://rpmfind.net/linux/fedora/linux/development/rawhide/x86_64/os/Packages/u/urw-fonts-2.4-14.fc19.noarch.rpm
- następnie instrukcje od http://www.howtogeek.com/howto/ubuntu/install-an-rpm-package-on-ubuntu-linux/ do zamiany rpm format deb.
- Zainstalowano deb
- 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:
- Utworzony nowy Ubuntu Amazon mikro instancji (free tier)
- sudo apt-get update
- sudo apt-get upgrade
- sudo apt-get install libx11-dev
- sudo apt-get install libfontconfig1-dev
- wget https://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.11.0_rc1-static-amd64.tar.bz2
- smołę xjf wkhtmltopdf-0.11.0_rc1-Static-amd64.tar.bz2
- Utworzono test2.html z zawartością od EDIT5 (patrz EDIT5 transkrypt)
- Ran wkhtmltopdf-amd64 na test2.html. Wyprodukowany plik pdf jest pusty!
- 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.
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ą. –
Proszę zobaczyć moje EDYCJE. – mark
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 –