7

これが私がしたことです:

  1. Amazon クラウドに Linux 仮想マシンを作成しました。
  2. https://code.google.com/p/wkhtmltopdf/wiki/compilationの指示に従って、wkhtmltopdf-qt および wkhtmltopdf のソース コードをダウンロードしてコンパイルします。最後に、wkhtmltopdf の静的ビルドを作成しました。
  3. このhtmlを取りました(http://jsfiddle.net/mark69_fnd/8CtjB/):

    <html> <head> <style type="text/css">p{font-family: sans-serif;};</style> </head> <body> <p>テストしてみましょう</p> </本文> </html>

  4. ラン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 を変換する必要がありますが、些細な 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
<html> <head> <style type="text/css">p{font-family: sans-serif;};</style> </head> <body> <p>Let's Test</p> </body> </html>
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/の指示に従って、rpm を deb 形式に変換します。
  3. debをインストールしました
  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 に変換することはできますが、Javascript コードを含む複雑な html ページでは変換できません。/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

OK、これはデフォルトの wkhtmltopdf バージョンでは動作しない最小限の例です:

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

作成された pdf は空です。ここにトランスクリプトがあります:

ubuntu@ip-10-245-78-162:~$ cat test2.html
<!DOCTYPE html>
<html>
  <head>
    <style type="text/css">
        html, body {
                height: 100%;
                overflow: hidden;
        }
    </style>
  </head>
  <body>
    Hello World!
  </body>
</html>
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 インストール 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. EDIT5 の内容で test2.html を作成( EDIT5トランスクリプトを参照)
  9. test2.html で wkhtmltopdf-amd64 を実行しました。生成された pdf が空です。
  10. test2.html から 6 行目または 7 行目 (CSS プロパティの幅またはオーバーフロー) を削除すると、突然動作します!

誰でも私の手順をたどって確認できますか?

EDIT8

ラップトップの VMWare VM に CentOS 6.4 をインストールしました。同じ結果です。wkhtmltopdf は、前述の単純な html ファイルでは機能しません。

4

1 に答える 1

3

次のように、html head タグに charset 宣言を設定してみてください。

<head>
  <meta charset="utf-8">
  ...
</head>
于 2013-06-06T11:28:39.127 に答える