Memo/PHP/wkhtmltox

https://dexlab.net:443/pukiwiki/index.php?Memo/PHP/wkhtmltox
 

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


不具合

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

UserAgent

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

サンプル

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

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

添付ファイル: filetest_form1.php 2136件 [詳細] filetest.jpg 1331件 [詳細] filetest.pdf 1856件 [詳細] filephpwkhtmltox.c.patch 1623件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-09-15 (土) 07:31:38 (94d)