2012-10-02 20 views
15

私は、HTML5/CSS3文書serveridesからPDFを生成するためのソリューションを探しています。HTML5 to PDF serverside

PDFを作成するためのソリューションがたくさんあることは知っていますが(FOP、iTextなど)、HTMLページと100%同じに見えるようにする必要があります。ですから、私はFOPやiTextのような要素でPDF要素を作成したくありません。

実際には、ブラウザからPDFとして印刷するときに実行する処理があるため、何かが存在するはずです。 理想的には、ソリューションにはWebブラウザエンジン(WebkitまたはGecko)が組み込まれている必要があります。私はwkHtmlToPdfを試しました...しかし結果はまったく良くありません(HTML5キャンバスは印刷されていません...)

誰かが自由に解決策を考えているなら、ありがとうございます! ありがとうございます!

+0

なぜこれがまだ閉じているのですか?すべての質問は、これよりも多くの「討論、議論、投票、議論の延長」を引き起こします。 –

+1

wkhtml2pdf now * does *レンダリングキャンバス... wkhtmltopdf.orgを参照してください。 wkhtml2pdfのための親指...それはプレーンの7000+ Javaクラスを扱う代わりにただ一つの実行可能ファイルを持っているプレーン素晴らしいです –

答えて

0

あなたはどの言語をサーバー側で使用していますか?

ページのスクリーンショットを作成し、画像をpdfに変換すると、おそらく最良の結果が得られます。それは、ブラウザによってレンダリングされるのとまったく同じページを表示します。

browshot.comのような、いくつかのScreenshot-as-a-serviceツールがあります。 APIsupported languagesをご覧ください。

ツールを使用することもできます。 node.jsについてはgithubに素晴らしいプロジェクトがあります。

+0

あなたの答えをありがとう。私はサーバー側でJavaを使用していますが、私は何か他のものを使用するために開いていますこのPDF生成。残念ながら、スクリーンショットはオプションではありません。生成されるPDFは、プロのプリンタ用の実際のPDFでなければなりません(たとえば、テキストはテキストでなければならず、ピクセルではありません)。 – Olivier

+0

画像をPDFに変換することは、本当に悪い考えです。すべてのテキストがゆるやかになるため、ズームはうまく行かず、コピー/ペーストや検索ができません。また、PDFファイルを必要以上に大きくします。 wkHtmlToPdfまたはphantomJsまたは通常のブラウザの印刷オプションを使用すると、テキストはPDFにテキストとして取り込まれ、ベクターグラフィックスもベクターとして入り、これらの問題を回避します。 – rjmunro

1

HTMLの複雑さによっては、iText開発者のプロジェクトでiTextを使用するXmlWorkerを使用することができます。

23

私はWebページからpng画像を生成するためにPhantomJSを使用しています。また、PDFも生成することができ、通常は品質が良好です。このプロパティはスクリーンキャプチャと呼ばれ、hereと記載されています。サポートされている形式はPNG、JPEG、GIF、PDFです。

PDFに変換すると、ページのテキストはテキストとして保持されます。

ほとんどの他のライブラリやプログラムをテストしたところ、PhantomJSは最も完璧な解決策でした。 PhantomJSは実際のレイアウトとレンダリングエンジンであるWebKitを使用します。

ほとんどの例がhttps://github.com/ariya/phantomjs/wiki/Examplesです。セクションレンダリング/ラスタライズでは、プロセスであなたを助け、次のスクリプトが言及されています

rasterize.js rasterizes a web page to image or PDF 

PhantomJS QuicStart Guide氏は述べています:PDF出力を生成

は、例えば、可能です

phantomjs rasterize.js 'http://en.wikipedia.org/w/index.php?title=Jakarta&printable=yes' jakarta.pdf 

やプリンタ対応チートシートの作成:Wikipediaの記事

phantomjs rasterize.js http://www.nihilogic.dk/labs/webgl_cheat_sheet/WebGL_Cheat_Sheet.htm webgl.pdf 

を私は数ページのPDF生成をテストし、ページが基準に従っている場合、それが良い結果を生成します。テキストは高品質で選択可能で印刷可能ですが、pdfのレイアウトによってはpngとまったく同じではありません。私はhttp://lab.simurai.com/buttons/も試験

$ phantomjs rasterize.js 'http://windows.microsoft.com/en-US/windows/home' microsoft.png 

$ phantomjs rasterize.js 'http://windows.microsoft.com/en-US/windows/home' microsoft.pdf 

Example of png and pdf generation using Phantomjs

:以下のコマンドを使用して生成される2つのスクリーンショットです。 pdfとpngは非常に同一で、以下は私が5641px幅にラスタライズしてその領域を切り取ったpdfのサンプルです。以前のPDFの例のように、テキストはPDFで選択可能で、見てのとおり、テキストはシャープです(アンチエイリアスはありません)。

私はCentos5ソースからコンパイルするにはQtライブラリとPhantomJSをインストールするには、最初に試さ

が、運の取り付け

CSS3Buttons

。次に、Ubuntuの11.10で、プロセスは無痛だった:

私はhttp://phantomjs.googlecode.com/files/phantomjs-1.7.0-linux-x86_64.tar.bz2をダウンロードして

tar -xjvf phantomjs-1.7.0-linux-x86_64.tar.bz2 

を使用して、それを抽出し、システムのbinディレクトリに実行可能phantomjsをコピー:

$ cp phantomjs-1.7.0-linux-x86_64/bin/phantomjs /usr/local/bin/phantomjs 

とphantomjsは準備ができていました走る。

生成されたPDFがうまくいかない場合は、Webkitを更新しようとするかもしれませんが、結果が十分であるはずです。 PhantomJSは更新サイクルが優れているため、合理的な時間内にバグを修正する必要があります。

PhantomJS FAQも可能性のある情報があります。