web-dev-qa-db-ja.com

HTML + CSSをに変換 PDF PHPで?

私はFirefox 3とIE 7でうまくレンダリングするHTML(XHTMLではない)ドキュメントを持っています。それはそれをスタイルするためにかなり基本的なCSSを使い、HTMLでうまくレンダリングします。

私はそれをPDFに変換する方法を考えています。私が試してみました:

  • _ dompdf _ :テーブルに大きな問題がありました。私は大きなネストしたテーブルを切り出して(128Mまでのメモリを消費してから死ぬ前に - php.iniのメモリの上限に達していましたが)手助けしました。画像テーブルは、さまざまな場所にいくつかの行を追加するための、いくつかの境界線スタイルを備えた基本的なものです。
  • HTML2PDFとHTML2PS :私は実際にこれでうまくいった。それはいくつかの画像をレンダリングし(すべての画像はGoogle ChartのURLです)、テーブルのフォーマットははるかに優れていましたが、私はまだ把握していない不明なnode_type()エラーで死に続けていました。ここからどこへ行くのかわからない。そして
  • Htmldoc :これは基本的なHTMLでは問題なく動作するようですが、CSSをまったくサポートしていないので、HTMLですべてを実行する必要があります(Htmldoc-landではまだ2001年だとは思いませんでした)。私には役に立たない。

私は実際にはかなりまともな仕事をしたHtml2Pdf Pilotと呼ばれるWindowsアプリを試しましたが、少なくともLinux上で動作し、理想的にはWebサーバ上のPHPを介してオンデマンドで動作するものが必要です。

何が足りないのでしょうか、あるいはどうやってこの問題を解決するのですか?

1520
cletus

重要: この答えは2009年に書かれたものであり、2019年の今日では最も費用対効果の高い解決策ではないかもしれないことに注意してください。

これがあなたが使うことができるいくつかのオンラインサービスです:


PrinceXML をご覧ください。

これは間違いなく最高のHTML/CSSからPDFへの変換ツールですが、無料ではありません(ただし、プログラミングも無料ではない可能性があるため、10時間の作業時間を節約できれば、自宅で無料です(あなたはまた別の解決策があなたに適切なソフトウェアで専用サーバーを設定することを要求するであろうことを考慮に入れる必要があるので)

ええ、私はこれが完全な ACID2 を行う最初の(そしておそらく唯一の)HTML2PDFソリューションであると述べましたか?

PrinceXMLのサンプル

512
SchizoDuckie

wkhtmltopdf をご覧ください。 Webkitをベースにした無料のオープンソースです。

私たちは小さなチュートリアルを書きました ここ

編集(2017):

もしそれが今日何かを構築するのであれば、私はもうその道をたどりません。
しかし、代わりに http://pdfkit.org/ を使用してください。
ブラウザで実行するために、おそらくそのすべてのnodejs依存関係を取り除きます。

653
Mic

なぜあなたは mPDFバージョン2.0を試してみませんか ?私はPDF文書を作成するためにそれを使いました。それはうまくいきます。

一方、mPDFはバージョン5.7であり、HTML2PS/HTML2PDFとは対照的に積極的に維持されています。

しかし、ドキュメントは本当に扱いにくい場合があることに注意してください。たとえば、次のページを見てください: https://mpdf.github.io/ /。

Htmlからpdfまでの非常に基本的な作業は、このライブラリを使って行うことができますが、より複雑な作業ではドキュメントを読んで「理解する」にはしばらく時間がかかります。

120
Karthick

1) _ mpdf _ !を使用してください。

a)yourfolderで抽出する

b)yourfolder file.php を作成し、そのようなコードを挿入します。

<?php
include('../mpdf.php');
$mpdf=new mPDF();
$mpdf->WriteHTML('<p style="color:red;">Hallo World<br/>Fisrt sentencee</p>');
$mpdf->Output();   exit;
 ?>

c)ブラウザから file.php を開きます




2) pdfToHtml !を使用してください。

1)ルートフォルダに pdftohtml.exe を展開します。

2)そのフォルダ内の anyfile.php fileに、次のコードを入れます(ソースexample.pdfもあるとします)。

<?php
$source="example.pdf";
$output_fold="FinalFolder";

    if (!file_exists($output_fold)) { mkdir($output_fold, 0777, true);}
$result= passthru("pdftohtml $source $output_fold/new_filename",$log);
//var_dump($result); var_dump($log);
?>

3) FinalFolder と入力すると、変換されたファイルが存在します(ソースPDFと同じ数のページ)。

65
T.Todua

チェックアウト _ tcpdf _ 。それはあなたが必要とするもののために十分かもしれないPDF機能へのHTMLを持っています。無料です!

54
Darryl Hein

DocRaptor( "エンジン"としてPrinceXMLを使用します)

29
Oren

それはすでに言及されています、しかし私はちょうどmpdfがそこに最も簡単で、最も強力でそして最も自由なHTMLからpdfへのコンバータであることを確認したいです。空は本当に限界です。動的なユーザー生成データのpdfを生成することもできます。

たとえば、クライアントは、自分のクラブで演奏した音楽のトラックリストを更新できるように、CMSシステムを望んでいました。それは問題ありませんでしたが、彼はまた、ユーザーがプレイリストの.pdfをダウンロードできるようにしたかったので、このダウンロード可能なpdfもcmsによって更新されなければなりませんでした。 mpdfのおかげで、いくつかの簡単なループと散在した変数を使って、私はそれをすることができました。私が何週間かかかると思ったことは文字通り私に数分かかった。

素晴らしい 記事 それは私が始めるのを助けました。

27
Starkers

ただスレッドをぶつけるために、私はDOMPDFを試してみましたが、それは完璧に動作しました。私はDIVや他のブロックレベルの要素を使ってすべてを配置しました。私はそれを厳密にCSS 2.1のままにしておいてとてもうまくプレーしました。

27

良い知らせです。 スナッピー !!

Snappyは 非常に簡単 オープンソースのPHP5ライブラリで、URL、またはHTMLページからサムネイル、スナップショット、またはPDFを生成できます。そして... ... excellent webkit-basedwkhtmltopdfを使います。

楽しい! ^ _ ^

27
Paulo Coghi

最初の投稿で言及されていた HTML2PDFとHTML2PS は、この link を持つ2009パッケージについて話していました

しかし、もっと良い HTML2PDF

一部はフランス語ですが、TCPDFに基づいています。

ページヘッダーとフッターをページ上で繰り返して、ページ番号と合計ページを含めることができます。 その例 を参照してください。私は3年以上それを使っていて、それを推薦します。

23
Luke Wenke

PDFコンバータライブラリに最適なXHTML + CSSを見つけたいのであれば、それを忘れてください。それは可能から程遠いです。それはちょうど完璧なブラウザ(XHTML + CSSレンダリングエンジン)を見つけるようなものだからです。持っていますか? IEかFFか

私はDOMPDFである程度成功しました。重要なのは、ライブラリの動作に合わせてHTML + CSSコードを修正する必要があるということです。それ以外は、私はかなり良い結果を得ています。

下記参照:

オリジナルのHTML

HTMLをPDFに変換する /

23
datasn.io

Zendのdevzoneにphp( part 1part 2 )からPDFを生成するチュートリアルがあります。外部ライブラリはありません。私はこの種の解決策を実装したことはありませんが、それはすべてphpなので、実装とデバッグがより柔軟であると思うかもしれません。

19
yoavf

dompdf build - 私はひどいリソースを独占していた古いバージョンを使用していて、私のpdfをレンダリングするのにずっと時間がかかりました。 ここ から毎晩つかんだ後。

PDFを生成するのに数秒しかかかりませんでした。そして、 PrinceXML / Docraptor と同じようにうまくレンダリングされました。前回使用してから、 dompdf コードを真剣に最適化したようです。

14
Arni J

_ tcpdf _ についてのDarryl Heinの言及は、おそらく素晴らしい考えです。 Nicola Asuniのコードはかなり便利で強力です。唯一の問題は、PDFファイルを生成されたPDFとマージすることを計画している場合、それらの機能がないことです。 PDFを作成してから、Sid Steward(www.pdflabs.com/tools/pdftk-the-pdf-toolkit/)によるPDFTKのようなものを使用してそれをマージする必要があります。

14
Arachnid

コストの面では、多くの場合、Webサービス(API)を使用することがより賢明な方法です。さらに、このプロセスを外部委託することによって、あなたはあなた自身のインフラストラクチャ/バックエンドに負担をかけることなく - そしてあなたが信頼できるサービスを使っているなら - ウェブ標準の調整、稼働時間、短い処理時間と迅速なコンテンツ配信との互換性を確実にします。

私は現在市場に出ているWebサービスの大部分についていくつかの調査をしました、価格/価値比率に基づく順序で、私がこのスレッドで言及する価値があると感じるAPIの下で見つけてください。それらのすべては、事前に構成されたPHPクラスとパッケージを提供しています。

  1. pdflayer.com - 費用:$ - 品質:☆☆☆☆
  2. docraptor.com - 費用:$$$ - 品質:☆☆☆☆☆
  3. pdfcrowd.com - 費用:$$ - 品質:☆☆☆

品質:

高品質のエンジンPrinceXMLをバックボーンとして持つことで、 DocRaptor は明らかに最高のPDF品質を提供し、高度に洗練され変換されたPDFドキュメントを返します。しかし、 pdflayer API サービスはここではかなり近づいています。 Pdfcrowd は必ずしも品質で得点するわけではなく、処理速度で得点します。

費用:

pdflayer.com - 上で示したように、ここで最も費用対効果の高いオプションはpdflayer.comで、月額100のPDFと$ 9.99から$ 119.99のプレミアム購読のための完全無料購読プランを提供します。 毎月10,000件のPDF文書の価格は$ 39.99です。

docraptor.com - 7日間の無料試用期間を提供する。プレミアム購読プランは15ドルから2250ドルの範囲です。 毎月10,000件のPDF文書の価格は約$ 300.00です。

pdfcrowd.com - 100個のPDFをonce無料で提供しています。プレミアム購読プランは9ドルから89ドルの範囲です。 毎月10,000件のPDF文書の価格は、〜49.00ドルです。

私はそれらの3つすべてを使いました、そして、このテキストは誰もがそれらのすべての支払いをする必要なしに決定するのを助けることになっています。この文章は一つの製品を支持するために書かれたものではなく、私はどの製品とも提携していません。

13
Frank

コマンドラインにアクセスできる場合は、 PhantomJS を使用してPDFからURLを作成できます(リモートまたはローカル)。

それは本当にうまくいき、そして無料の解決策です。

この正確な問題のために作られたこの example スクリプトを見てください。

12
chjortlund

この質問はすでにかなり古くなっていますが、 CutyCapt に言及している人はいませんでした:)

CutyCapt

CutyCapt は、WebKitによるWebページのレンダリングを、SVG、PDF、PS、PNG、JPEG、TIFF、GIF、BMPなどのさまざまなベクトル形式およびビットマップ形式にキャプチャするための小規模なクロスプラットフォームのコマンドラインユーティリティです。

11
Koen.

私はPHPクラスがCSSでxHtmlページをレンダリングするのに最適になるとは思わない。

新しいCSSルールが出るとどうなりますか? (すぐにCSS 3.0 ...)

HTMLページをレンダリングする最善の方法は、明らかにブラウザです。 Firefox 3.0はネイティブにpdfフォーマットで '印刷'することができ、torisugaryはそれを使用するための拡張(コマンドライン印刷)を開発しました。 ここで見つけることができます

とにかく、まだ多くの問題があります。runninr firefox ちょうど pdfコンバーターとして...

現時点では、私はwkhtmltopdfが(サファリブラウザによって使用されるものである)最も速く、速く、すばらしく、最高であると思います。はい、同様にオープンソースです... それを見てみましょう

9
Strae

おそらく、あなたは、ファイルをコンバーターに渡す前にTidyを試して使うかもしれません。レンダラーの1人が何らかのHTMLの問題(閉じられていないタグなど)をチョークした場合は、それが役立つ場合があります。

9
PhiLho

私はWebページからPDFファイルを構築するためのパブリックAPIを開発しました。それはとても使いやすくするためのNice PHPクライアントクラスを持っています。これはwkhtmltopdfを使用してPDFをクラウドにレンダリングします。

HTMLに特別なものは必要ありません。 images/css/jsリンクに絶対URLは必要ありません。 localhost(dev machine)でも動作します。

現在、このサービスは4つのAzure地域(米国東部、米国西部、EU北部、東南アジア)にエンドポイントがあります。

独自のプロトコルを使用してWebページのコンテンツをAPIに送信してPDFに変換するので高速です。

すべてのエンドポイントが負荷分散されているので信頼性があります。

テストまたは使用率の低い利用可能な無料アカウント。 Webサイトの詳細:

https://rotativahq.com

9
Giorgio Bozio

私はTCPDFかDOMPDFの順にお勧めします。

8
criss_ae

すでに多くの解決策が提供されていますが、私は次の2つをお勧めします。

  1. HTM2PDF - HTMLをPDFに変換するためのAPIを提供し、またPHP SDKを使用します。これによりPHPでの実装が非常に簡単になります。ヨーロッパ、アジア、アメリカのサーバーの場所を選択できます。
  2. PDFmyURL - HTM2PDFとほぼ同じ機能を持ち、URLとHTMLをPDFにも提供するAPIを提供しますが、ロードバランスの取れたランドスケープで動作し、もう少し長くなりました

これら2つのAPIについて前述のすべてのソリューションと異なる点は、CSSとJavaScriptを使用してHTMLをPDFに変換することに加えて、PDF権利管理、透かし入れ、および暗号化も提供することです。したがって、これは実用化したい人のためのオールインワンソリューションです。

免責事項:私はKaiomi、これら両方のウェブサイトを運営する会社で働いています。

7
user1914292

細かいレンダリングは何も意味しません。検証しますか?

どのブラウザでも、入力がどれほど悪くても、画面に何かを表示するためにできる限りのことをします。そしてもちろん、彼らは同じことをしません。 FireFoxと同じレンダリングが必要な場合は、そのレンダリングエンジンを使用できます。それのためのpdfジェネレータがあります。しかし、それはひどい仕事です。

7

TCPDFは問題なく動作し、依存関係はありません。無料であり、常にバグが修正されています。提供されたHTML/CSSコンテンツが適切にフォーマットされていれば、それは妥当な速度です。私は通常50 - 300 kBのHTML入力(CSSを含む)から生成し、1 - 3秒以内に10 - 15 PDFページでPDF出力を得ます。

TCPDFに何かを送信する前に、HTMLプリティフォーマッタとして tidy libraryを使用することを強くお勧めします。

5
lubosdz

HTMLからPDFへの変換は、実際にはPHPを使用してサーバー側で行われるために必要ですか?

私はHTML5/JavaScriptを使ったクライアントサイドのソリューション jsPDF に出会ったところです。 MITライセンスの コードはGitHub にもあります。

5
Oliver Schafeld

私はPHP用にたくさんの異なるライブラリを試しました。私が試したすべてのリスト。私の意見では _ tcpdf _ / libraryは、妥協のないパフォーマンス/ユーザビリティです。インストールと使用が非常に簡単で、中小規模のアプリケーションでも優れたパフォーマンスを発揮します。高性能で非常に大きなPDFドキュメントが必要な場合は、 Zend_PDF moduleを使用してください。

4
trullallero

Web API

この種のものを常に検索する人がいる場合は、HTMLコードとページをPDFに変換できる free Webサイトがあります。あなたがURLからpdfファイルを得ることを可能にする(非常に小さい)apiもあります。

ここで確認してください

3
Superdrac

_ php _ ではなく、 Java library のようになります。

Flying SaucerはXMLまたはXHTMLを取り、それにCSS 2.1準拠のスタイルシートを適用してPDFにレンダリングします。

_ php _ からsystem()または同様の呼び出しを介して使用できます。それは _ xml _ inputの整形式を必要としますが。

2
Ivan Kurmanov