Memo/PHP/wkhtmltox

http://dexlab.net/pukiwiki/index.php?Memo%2FPHP%2Fwkhtmltox
 

php-wkhtmltox HTMLからPDFを生成するPHPエクステンション


不具合

  • 出力形式をpdfと画像で変えて、何度か実行すると、文字列だけのPDFになる。CSSやJavaScript?の処理が終わってない感じ。httpdを再起動すると直る。
  • 「signal Segmentation fault (11)」が起きることがある

UserAgent?

  • wkhtmltopdfが取得した際のaccess_log
    1. "GET / HTTP/1.1" 200 737 "-" "Mozilla/5.0 (X11; U; Linux i686; C) AppleWebKit/533.3 (KHTML, like Gecko) Qt/4.7.0 Safari/533.3"

インストール

  • CentOS5.4の場合
  • git,php-devel,re2cが無い場合、先にインストール
    1. yum install git re2c --enablerepo=rpmforge
    2. yum install php-devel
  • fontconfig 2.4.2以上が必要。yumではrpmforgeを含めても「fontconfig-2.4.1-7.el5」しか無かった
    • fontconfig-2.4.1-7.el5 では、configureで以下エラーが出る
      1. configure: error: libwkhtmltox version 0.10 or later required
      2.  
      3. config.log を見る
      4. less config.log
      5. ----
      6. configure:3364: gcc -o conftest -g -O2  -Wl,-rpath,/usr/local/lib -L/usr/local/lib  conftest.c -lwkhtmltox   >&5
      7. /usr/local/lib/libwkhtmltox.so: undefined reference to `FcFreeTypeQueryFace'
      8. ----
    • fontconfig 2.4.2をインストール
      1. wget http://fontconfig.org/release/fontconfig-2.4.2.tar.gz
      2. tar xvfz fontconfig-2.4.2.tar.gz
      3. cd fontconfig-2.4.2
      4. ./configure
      5. make
      6. make install
  • /usr/local/libを追加
    1. cat >> /etc/ld.so.conf << EOS
    2. /usr/local/lib
    3. EOS
    4. ldconfig
  • インストール。gccにはfalseやらboolやらが定義されていなくてコンパイルが通らないのでパッチを当てる
  • パッチ:filephpwkhtmltox.c.patch
    1. cd /usr/local/src/
    2.  
    3. wget "http://wkhtmltopdf.googlecode.com/files/libwkhtmltox-0.10.0_beta5-i386.tar.lzma"
    4. lzcat libwkhtmltox-0.10.0_beta5-i386.tar.lzma | tar xfv -
    5. mv lib/* /usr/local/lib/
    6. mv include/* /usr/local/include/
    7.  
    8. git clone git://github.com/mreiferson/php-wkhtmltox.git
    9. cd php-wkhtmltox/
    10. phpize
    11. ./configure
    12. make
    13. In file included from /usr/local/src/php-wkhtmltox/phpwkhtmltox.c:8:
    14. /usr/local/src/php-wkhtmltox/phpwkhtmltox.h:15:7: warning: no newline at end of file
    15. /usr/local/src/php-wkhtmltox/phpwkhtmltox.c: In function 'zif_wkhtmltox_convert':
    16. /usr/local/src/php-wkhtmltox/phpwkhtmltox.c:99: error: 'false' undeclared (first use in this function)
    17. /usr/local/src/php-wkhtmltox/phpwkhtmltox.c:99: error: (Each undeclared identifier is reported only once
    18. /usr/local/src/php-wkhtmltox/phpwkhtmltox.c:99: error: for each function it appears in.)
    19. /usr/local/src/php-wkhtmltox/phpwkhtmltox.c:141: error: 'bool' undeclared (first use in this function)
    20. /usr/local/src/php-wkhtmltox/phpwkhtmltox.c:141: error: expected ')' before 'ret'
    21. /usr/local/src/php-wkhtmltox/phpwkhtmltox.c:183:3: warning: no newline at end of file
    22. make: *** [phpwkhtmltox.lo] エラー 1
    23.  
    24. パッチを当てる
    25. patch -p1 < phpwkhtmltox.c.patch
    26. make
    27. make install
    28.  
    29. cat > /etc/php.d/phpwkhtmltox.ini << EOS
    30. extension=phpwkhtmltox.so
    31. EOS
    32.  
    33. service httpd restart
    34. php -m | grep phpwkhtmltox
    35. phpwkhtmltox

サンプル

オプションは非常にたくさんあるので、Linuxコマンドライン版を「-H」付きで実行すると色々わかります。

  • test_pdf.php HTML->PDFへ変換。結果:filetest.pdf
    1. <?php
    2. wkhtmltox_convert('pdf', 
    3. array('out' => 'test.pdf', 'imageQuality' => '95'), // global settings
    4. array('page' => 'http://www.visionaryrenesis.com/'),
    5. array('page' => 'http://www.google.com/')
    6. )); // object settings
  • test_image.php HTML->画像へ変換。結果:test.jpg
    1. <?php
    2. wkhtmltox_convert('image', 
    3. array('out' => 'test.jpg', 'in' => 'http://www.google.com/')); // global settings
  • test_local.php ローカルファイル(index.html)をPDFへ変換
    1. <?php 
    2. wkhtmltox_convert('pdf', 
    3. array('out' => 'test.pdf'), // global settings
    4. array('page' => './index.html')
    5. )); // object settings
  • test_option.php その他オプション。コマンドライン版のようにページ番号を付与するオプション「--header-right "Page [page] of [toPage]"」の指定方法がわからん
    1. <?php 
    2. wkhtmltox_convert('pdf', 
    3. 'out' => 'test.pdf'
    4. , 'page-size' => 'A4' // ページサイズ
    5. , 'orientation' => 'Portrait' // 横:Landscape, 縦:Portrait
    6. ), // global settings
    7. array('page' => 'http://www.yahoo.co.jp/')
    8. )
    9. ); // object settings
  • filetest_form1.php フォームからURLを入力できるようにしたサンプル。

添付ファイル: filetest_form1.php 2112件 [詳細] filetest.jpg 1282件 [詳細] filetest.pdf 1811件 [詳細] filephpwkhtmltox.c.patch 1585件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-06-29 (土) 09:26:50 (1761d)