Webブラウザで見えているものをそのままPDF化する方法……を長々と調べるのは時間のムダ!!

Javascript や PHP を使って「Webブラウザで見えているものをそのままPDF化したい。簡単にできそうな印象なので、どうすれば良いか教えて欲しい」と聞かれることがあります。

結論から言うと、簡単かつ万能の方法はありません。今のところ。

ここでは、なぜ無理なのかということ、無理なりにもどうにかする方法と勘所 (制約) についてお話します。

Javascript では無理
〜 html2canvas で妥協する? 〜

Webブラウザの画面表示は、HTML + CSS + Javascript + Flash などを全て実行することで始めて得られます。Javascript ならば Webブラウザ上 で動きますから、完全に表示された Webページ をどうにかして取得して PDF化 できそうにも思えます。しかし、Webブラウザは著作権保護やセキュリティの観点から、画面に見えているものの一部に対して、外部からのアクセスを排除する仕組みを備えています。例えば iframe や object などが含まれているページを、見えているものをそのまま PDF化 するのは殆ど不可能です。よって Javascript を PDF化 に使うのは本質的に無理です。

この辺りの制約をよしとするのであれば html2canvas を使って Javascript によるスクリーンショットがとれます。この画像を サーバ に送信して PDF化 すればそれなりに、「Webブラウザで見えているものをそのままPDF化」できます。

PHP では無理
〜 mPDFで妥協する? 〜

PDF はどこでも同じに見える電子文書交換のためのものですが、Webブラウザ が扱う HTML文書 はそもそも内容とその構造 (章立てなど) を扱うためのもので、見た目は扱いません。ですから、その設計思想からしてこれらの間には親和性がありません。
もちろん、CSS によって HTML文書 の見た目をきめることができ、各種 Webブラウザ での表示を同一にすることができます。ここを上手く取り扱えれば PDF化 ができるように思えますし、実際にそれは正しいです。

しかし、残念ながら PHP ではそのようなプログラムが完備されていないため、HTML + CSS を上手く取り扱うプログラムをある程度作る必要があります。具体的にはレンダリングエンジンを作るか、Webブラウザのためのレンダリングエンジンをどうにかして利用する必要があります。
Webブラウザ が HTML文書 を表示を担当しますから、分担として、サーバ側で動く PHP などで書かれるプログラムは HTML + CSS の取り扱いやレンダリングの取り扱いが完備ではないからです。

実際に HTML + CSS を解釈して PDF を作る PHP のプログラムがいくつかあります。例えば mPDF です。日本語を使うにはプログラムを多少書き換える必要がありますが、 時代工房の部活動 – さくらインターネット+PHPで日本語PDF生成 などを参考にすれば簡単に準備できるでしょう。PDF化 したい Webページ の HTML と CSS を流し込めば PDF が得られます。
ですが、レンダリングは結構大きなプログラムなので、mPDF の HTML + CSS の解釈は一部にとどまります。例えば float、position、z-index、border などを始め、思い通りのレンダリング結果を得ることは難しいでしょう。また、昨今の Webページ は Javascript なしに完全な表示を得られない場合があります。このような Webページ は完全にお手上げです。

HTML5 + CSS3 で作られた Webページ も多いでしょうから、mPDF などでは目的を達することは難しいでしょう。なので、私は mPDF を使いません。

自分で作るか、だれかが作ってくれるのを待つ

Google Chrome の PDFビューア や レンダリングエンジンは PDFium
Blink のようにオープンソースがあるので、著作権やセキュリティが関わる部分以外はいずれ簡単に PDF化 できるようになるでしょう。どなたかよろしくお願いします。

それまでは html2canvas や ( mPDF ではなく ) tFPDI などを使って待ちましょう。tFPDI は PDF を生成するためのコードを書かねばなりませんが、書類生成などには十分使えます。例えば、 PDF でも Webページ でも同様に (書類の用紙) 画像を背景としておき、記入内容は正規化した座標、フォントサイズ、文字列のJSONを処理するようにすればあまり苦労せずに、プレビュー と PDF を生成できます。

お問い合わせについて

業務として技術コンサルティングやシステム設計・開発を行っております。
気になることがありましたらご相談下さい。
ご相談のみで完結する場合、コンサルティング費用の目安は
内容によりますが1時間で5千円〜1万円ていどです。
コンサルティングや開発を検討されるその前に、
まずはお気軽にコメントやメールでご連絡下さい。
※ご契約前のコメントやメールでのやりとりは無料です。

お問い合わせフォーム

お急ぎの場合など、ただちに業務対応が必要な場合は、こちらのお問い合わせフォームをご利用ください。かきしちカンパニーお客様窓口が直ちに対応いたします。
※窓口へのお問い合わせ、お見積もりは無料です。


お名前 (必須)

メールアドレス (必須)

題名

メッセージ本文 (必須)

Share

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*