web-dev-qa-db-ja.com

PDF)を使用してHTMLをPDF(not PHP to HTML)

私はPHP開発者であり、私のプロジェクトの1つで、いくつかのHTMLドキュメント(約30〜50ページ)をPDFドキュメントに変換する必要があります。

私の検索では、次の可能な解決策が見つかりました。それらの中には、いくつかのPHPライブラリといくつかのコマンドラインアプリケーションがあります。それぞれに、独自の長所と短所があります。

PHPライブラリ:

  1. fpdf(変換するためにより多くの努力が必要)
  2. tcpdf(変換するためにより多くの努力が必要)
  3. html2fpdf http://html2fpdf.sourceforge.net
  4. html2pdf http://html2pdf.fr/
  5. dompdf http://code.google.com/p/dompdf/ (他と比較して、うまく機能します)

ライブラリごとに、次のような問題があります。

  1. 時間がかかります(30のHTMLページを変換するのに5分以上かかります)
  2. 必要なリソース(メモリと時間)が多すぎます

    (php.iniで次のパラメーターを設定しました:

    _max_execution_time = 600_
    _memory_limit = 250M_

    しかし、それでもうまくいきません。)

  3. HTMLページを適切にフォーマットする必要があります(例:閉じるタグが欠落していない)

単純なHTMLドキュメント(CSSがほとんどない5ページ以下)を変換しようとすると、これらすべてが機能します

コマンドラインアプリケーション

すべてのコマンドラインアプリは、上記のライブラリと比較して完全かつ非常に高速に動作しますが、コンソールで直接実行した場合に限ります。 PHP with exec()またはsystem()で使用しようとすると、エラーが発生します。

以下は、コマンドラインアプリケーションとPHPで実行したときのエラーです。

  1. html2pdf( http://www.tufat.com/s_html2ps_html2pdf.htm

    html2pdf:11380):Gtk-警告**:ディスプレイを開くことができません:: 0.0
    プロトコルが指定されていません

  2. wkhtmltopdf

    ページの読み込み:10%
    ページの読み込み:33%
    ページの読み込み:100%
    リダイレクトを待っています
    ページの出力
    QPainter :: begin():falseを返しました
    QPainter :: begin():falseを返しました
    QPainter :: save:ペインターがアクティブではありません
    QPainter :: scale:ペインターがアクティブではありません
    QPainter :: setRenderHint:レンダリングヒントを設定するには、Painterがアクティブである必要があります
    QPainter :: setBrush:ペインターがアクティブではありません
    QPainter :: pen:ペインターがアクティブではありません
    QPainter :: setPen:ペインターがアクティブではありません

  3. htmltopdf( http://www.ultrashareware.com/html-to-pdf.htm

だから今私は助けを探しています。誰でも答えることができます:

私の場合、どのPHPライブラリがうまく機能しますか?

コマンドラインアプリケーションでこれらのエラーが発生するのはなぜですか?

26

wkhtmltopdfについて:

  • これは非常に高速に動作し、スローするあらゆる種類のHTML/CSSを処理できるため、速度が必要な場合は、真剣に検討する必要があります。私たちは最近、私たちの会社でそれに切り替えました、そして私たちのPDFサービングは途方もないスピードブーストを得ました。

  • 少なくともLinuxでは、XOrgライブラリをインストールする必要があります。通常、サーバーにはXOrgライブラリがないため、問題が発生する可能性があります。

8
Rene Saarsoo

これを試して:

3
FDisk

Prince を試しましたか?

2
Dan Herd

HTMLをPDFに変換するための解決策はたくさんありますが、 https://grabz.it で解決策を提案できます。

には柔軟なPHP APIがあり、cronjobで使用することも、PHP Webページから直接使用することもできます。

試してみたい場合は、最初に認証用に アプリキー+シークレット を取得し、 開発フリーSDK を取得する必要があります

これは基本的な実装の例です。

//First init
include("GrabzItClient.class.php");

// Create the GrabzItClient class
// Replace "APPLICATION KEY", "APPLICATION SECRET" values for your account!
$grabzIt = new GrabzItClient("Application Key", "Application Secret");

// To take a PDF screenshot
$grabzIt->URLToPDF("http://www.google.com");

// To save in case public callback handler is available
$grabzIt->Save("http://www.example.com/handler.php");   
// OR To save in case public callback handler is not available,
// it's a synchonous method can be usedthe will force your application to wait 
// while the screenshot is created
$filepath = "images/result.jpg";
$grabzIt->SaveTo($filepath);    

画像のスクリーンショットなど などの他の種類のスクリーンショットを取得することは可能です。

1
Johnny

HTMLDOCコマンドラインツールプロジェクトを試してください https://www.msweet.org/htmldoc/index.html

1
xmedeko

1つの可能性:スクリプトを自動的に作成する:

  1. Webページを取得します
  2. そのページをWebブラウザで開きます
  3. そのページのスクリーンショットを撮る
  4. PDFに変換する

ステップ4は簡単です-画像をPDFに配置したり変換したりできるPHP /コマンドラインライブラリがたくさんあります(例:fpdf)。

手順1〜3については、ここからコードを確認してみてください: http://browsershots.org/ 。関連性があるかどうかはわかりません-多くの設定が必要なようです。たぶん彼らのアーキテクチャはうまくいくでしょうか?

0
poundifdef

いくつかの質問と提案:

  • 本当にPDFに変換する必要がありますか?どうして?場合によっては、HTMLに固執する方がよいでしょう。
  • PDFオプションを生成するサーバーのハードウェアをアップグレードしていますか?試したすべてのライブラリの作成に時間がかかりすぎる場合、唯一のオプションはアップグレードである可能性があるため、これを尋ねましたサーバー。
  • コマンドラインエラーの問題を解決することをお勧めします。それが最速の結果をもたらす場合は、それを回避する方法を見つけてください。
0
Randell

しかし、オンラインサービスを使用して、HTMLコンテンツをHTTP経由で送信する場合はどうでしょうか。もちろん、それらのほとんどは無料ではありません。

0
user170442