wkpdf — URLからPDFを作成

FileMakerのソリューションで、コマンドラインによって、指定のURLからPDFを作成…という機能を実装する要望があったため、wkpdfをインストールした。

wkpdf の特徴

  • HTMLレンダリングに WebKit を使用
  • JavaScript も効くので、Safari の表示とほぼ近いレンダリング結果になる
  • –username –password オプションを指定することで、Basic認証などにも対応
  • 当然、出力結果のPDFファイルは、画像ではないので、テキスト検索が効く
  • サムネイルとしては使いにくい
    ※ 画像ファイル形式での出力不可/サイズ指定切り出し不可

Install

MacRuby

wkpdf は MacRuby を使用する。

  1. MacRuby の公式ダウンロードページから、Latest Stable Release の standalone binary installer のパッケージをダウンロードする。
    ※  2012/03/21 現在、MacRuby 0.10
  2. 解凍してできるインストーラパッケージをダブルクリックして指示に従いインストールする。

wkpdf

通常の gem を使ったインストール

sudo gem update –system

sudo gem install wkpdf

※ 当然、インストール後の Update も…

gem update wkpdf

で、OK。

Usage

Basic Usage

基本的には…

wkpdf –source http://foo.com/ –output foo.pdf

というように、–source オプションで、取得元URL を、–output オプションで、出力先PDF名を指定する。
※ 出力先PDFパスと考えてOK

Other Usage

以下が、wkpdf –help の出力結果である。

–output, -o <s>: Output PDF filename
–source, -s <s>: URL or filename (supported protocols: http, https, ftp, file), if
not present read from stdin (default: /dev/stdin)
–paper, -p <s>: Paper size (folio | ledger | letterSmall | legal | a0 | a1 | a2 |
statement | quarto | b4 | a3 | b5 | a4 | executive | letter | a5 |
a4small | custom:WxH | 10×14 | tabloid) (default: a4)
–orientation, -r <s>: (landscape | portrait) (default: portrait)
–hcenter, -c: Center horizontally (default: true)
–vcenter, -e: Center vertically
–paginate, -a: Enable pagination (default: true)
–margins, -m <i+>: Paper margins in points (T R B L) (V H) or (M)
–caching, -i: Load from cache if possible (default: true)
–timeout, -t <f>: Set timeout to N seconds (default: 3600.0)
–stylesheet-media, -y <s>: Set the CSS media value (default: screen)
–user-stylesheet, -u <s>: URL or path of stylesheet to use
–user-script <s>: URL or path of script to use
–print-background, -n: Display background images
–ignore-http-errors, -g: Generate PDF despite, e.g., a 404 error
–username <s>: Authenticate with username
–password, -w <s>: Authenticate with password
–enable-plugins, -b: Enable plugins
–enable-javascript, -l: Enable javascript (default: true)
–save-delay <f>: Wait N seconds after loading to generate PDF (default: 0.0)
–version, -v: Print the version and exit
–help, -h: Show this message
–debug, -d: Print debug output

出力用紙サイズ (–paper) や用紙方向 (–orientation) 、ページネーション (–pagination) などの出力様式指定も一通り指定できるし、Basic認証の向こうのURL も対応するので、シンプルに必要最低限のことはできる。

Notice

URL中に、アンパサンドやクエスチョンが入る場合は、URL を シングル(or ダブル)クォーテーションで括ってやる必要がある。

※ もちろん、出力パスにスペースが入る場合なども同様。

URL中に、日本語が入っていると、その部分をUTF-8 URLエンコードしてやらないとエラーになる。

※ 対処策を勘案中 (2012/03/21 20:30:49)

対処策 (2012/03/22 13:03:09)

GetAsURLEncoded ( URL ) だと、スラッシュやコロンなどまでURLエンコードされてしまうので、「一文字ずつ改行区切りにして non-ASCII だけを…」とか
あほみたいに考えていたけど、ほぼ以下の通りで解決。

“‘” & URLDecode ( GetAsURLEncoded ( URL ) ) & “‘”

カスタム関数 URLDecode は、
http://www.briandunning.com/cf/528

————————————-

Ruby 側に対処するという手法だと、

Rubyで日本語を含むURLを扱う

な話なんだろね。
これをやっちまうと、Updateされたときに上書きされちまうだろうし、変更箇所などの詳細を覚えておく自信もないし、今回は FileMaker 側で対処することに。

コメント

  1. […] ココで言及したように、wkpdf を使って、指定した URL のレンダリングイメージを出力させるっつーのをよく使うですよ。 […]

タイトルとURLをコピーしました