wkhtmltopdf で Ajax コンテンツを撮影する

なにするものぞ

wkhtmltopdf - Project Hosting on Google Code

  • WebKit
  • Qt

を利用して、コマンドラインで Web ページのレンダリング結果を PDF や画像に変換できるツールです。

今回試したのは static link の OSX(386) 版 0.10.0 beta 4 です。

wkhtmltopdf と wkhtmltoimage ができてた

以前知ったときに、おぉこれはいいなと思ったのですが、うまく撮れるサイトと撮れないサイトがあってちょっと置いておくかーと思っていました。試したバージョンはよく覚えてません。

今回、この中に wkhtmltoimage という文字を見つけたのでこっちを試してみたところ、一部文字組みに凝っているところなどは wkhtmltopdf よりレイアウトの再現性がよいみたいです。1とは言え、PDF なら文書構造も文字情報も保持されるので、テキストベースの再利用性を考えれば wkhtmltopdf の方がいいわけです。

画像さえ撮れればいい場合は wkhtmltoimage で

--format png

などとした方が劣化もなくてきれいです。

ただし全体の見た目はフォントも影響するので、やはり Linux で作るより Mac で作った方がきれいです。

delay を設定すれば Ajax も ok

例えば bijin-tokei(金沢版)official website / Japanese Ver. なんかは肝心の画像の load が遅延実行されるのでそのまま実行しても悲しいことになります。

でも手元の環境では

--javascript-delay 15000

で撮ることができました。たぶんネットワーク環境にもよるので、この数値は一般化できないと思います。

エラー処理

サーバに繋がって 404 が返って来る場合は exit status は 2 になるけど動作は止まらず、スクリーンショット(?)自体も撮れますが、サーバ自体の response がない場合には abort してしまいます。

これは

--load-error-handling

で回避します。これを skip か ignore にすれば大丈夫。( default はabort. ) skip と ignore の違いはよく分かっていません。skip しても ignore しても何かが render されます。

ライセンス

wkhtmltopdf, wkhtmltoimage の実行バイナリのライセンスは GPL v3 or later になります。ただし、libwkhtmltox の部分は LGPL v3 のようです。libwkhtmltox っていうのも以前はなかったのですが、今後はこれをコアにしてアプリや操作は自分で好きなの作ってよ、みたいな展開があるのかも。そうなると面白いですね。

  1. PDF に文字情報として残したうえでレイアウトを凝ろうとすると苦労するのは通常のドキュメントでも一緒ですよね。 

More

Categories

Tool 日々 Web Biz Net Apple MS ことば News Unix howto Food PHP Movie Edu Community Book Security Text TV Perl Ruby Music Pdoc 生き方 RDoc ViewCVS CVS Rsync Disk Mail FreeBSD Cygwin PDF Photo Zebedee Debian OSX Comic Cron Sysadmin Font Analog iCal Sunbird DNS Linux Wiki Emacs Thunderbird Sitecopy Terminal Drawing tDiary AppleScript Life Money Omni PukiWiki Xen XREA Zsh Screen CASL Firefox Fink zsh haXe Ecmascript PATH_INFO SQLite PEAR Lighttpd FastCGI Subversion au prototype.js jsUnit Apache Trac Template Java Rhino Mochikit Feed Bloglines CSS del.icio.us SBS qwikWeb gettext Ajax JSDoc Rails HTML CHM EPWING NDTP EB IE CLI ck ThinkPad Toy WSH RFC readline rlwrap ImageMagick epeg Frenzy sysprep Ubuntu MeCab DTP ERD DBMS eclipse Eclipse Awk RD Diigo XAMPP RubyGems PHPDoc iCab DOM YAML Camino Geekmonkey w3m Scheme Gauche Lisp JSAN Google VMware DSL SLAX Safari Markdown Textile IRC Jabber Fastladder MacPorts LLSpirit CPAN Mozilla Twitter OpenFL Rswatch ITS NTP GUI Pragger Yapra XML Mobile Git Study JSON VirtualBox Samba Pear Growl Mercurial Rack Capistrano Rake Win RSS Mechanize Sitemaps Android JavaScript Python RTM OOo iPod Yahoo Unicode Github iTunes God SBM friendfeed Friendfeed HokuUn Sinatra TDD Test Project Evernote iPad Geohash Location Map Search Simplenote Image WebKit RSpec Phone CSV WiMAX USB Chrome RubyKaigi RubyKaigi2011 Space CoffeeScript Nokogiri Hpricot Rubygems jQuery Node GTD CI UX Design VCS Kanazawa.rb Kindle Amazon Agile Vagrant Chef Windows Composer Dotenv PaaS Itamae SaaS Docker Swagger Grape WebAPI Microservices OmniAuth HTTP 分析基盤 CDN Terraform IaaS HCL Webpack Vue.js BigQuery Middleman CMS AWS PNG Laravel Selenium OAuth OpenAPI GitHub UML GCP TypeScript SQL Hanami Develop Document Jekyll