提案されたオプションを見て、私が共有したい非常に興味深いソリューションを思い出しました。
QTを使用したPDF生成
私はPDFが何であるかを繰り返さないでしょう、私はすべてが最新であると思います。 すぐにビジネスに取りかかります。
必要なもの:
-Linuxにアプリケーションをインストールできる専用サーバー。
-qt-webkitモジュールを備えたQT 4.4ライブラリ。 これがアプリケーションの頭脳です。
-ソースコードまたは既にコンパイルされたwkhtmltopdfプロジェクト。 これがアプリの中心です。
-Xvfb Xvfbは小さなXサーバーの代替です。 彼は資源を食べませんが、何も見せません。 ただし、必要な機能は実行します。
ちょっとした理論:
Webkit HTMLレンダリングエンジンを使用してHTMLページをレンダリングし、仮想PDFプリンターに印刷することにより、HTMLからPDFを生成します。
システムを準備します。
1.コンソールアプリケーションがX11への接続を必要としないようにXvfbを起動します
#/ usr / bin / Xvfb:0 -screen 0 1024x768x24 -ac
ここでは、スタートアップ時にこのビジネスを登録する必要がありますが、だれもが異なるLinuxシステムを持ち、これを行うための多くのオプションがあるので、私はアドバイスしません。
2. QTがすでにシステムにインストールされていることを願っています。 また、wkhtmltopdfは、自分の手でダウンロードまたはコンパイルされます。
/ usr / bin / wkhtmltopdfにインストールします
3.テスト。
#DISPLAY = ":0.0" wkhtmltopdf habrahabr.ru habr.pdf
獲得する必要があります:)
シェルを書いています。
Zend Frameworkは現在のプロジェクトを完全に記述するために使用されるため、コンポーネントはそれを拡張したものになります。
これについて詳しく記事全体を書くことができます。 まだそれを掘り下げていない人が、最終的に自分自身でこれを行う力を見つけることを願っています。
クラスは次のとおりです。
<?php
クラス Zfe_PDFGen {
const DISPLAY = ':1.0' ;
const CACHEDIR = '/ application / cache /' ; //ドキュメントルートから
const EXEC = '/ usr / bin / wkhtmltopdf' ;
private $ _source ;
プライベート $ _destination ;
関数 Zfe_PDFGen ( $ aSource 、 $ aDestination ){
$ this- > setSource ( $ aSource );
$ this- > setDestination ( $ aDestination );
}
パブリック関数 setSource ( $ aSource ){
$ filename = new Zfe_Uuid ();
$ tmpfile = $ _SERVER [ 'DOCUMENT_ROOT' ]。 self :: CACHEDIR 。 $ filename 。 ".html" ;
file_put_contents ( $ tmpfile 、 $ aSource );
$ this- > _source = $ tmpfile ;
}
パブリック関数 setDestination ( $ aDestination ){
$ this- > _destination = $ _SERVER [ 'DOCUMENT_ROOT' ]。 $ aDestination ;
}
public function generate (){
$ result = '' ;
$ exec = sprintf ( 'DISPLAY = "%s"%s%s%s' 、 self :: DISPLAY 、 self :: EXEC 、 $ this- > _source 、 $ this- > _destination );
exec ( $ exec 、 $ result );
リンク解除 ( $ this- > _source );
}
}
Zfe_UUidはファイル名( RFC 4122に基づくランダムな一意の識別子)の生成に使用されることに注意してください。確かにそれはありませんが、独自のジェネレータを作成することは難しくないと思います。
使用例
<?php
$ fetchview = new Zend_View ();
$ fetchview- > addScriptPath ( $ this- > view- > getScriptPaths ());
$ result = $ fetchview- > render ( 'index / _mailpdfgen.phtml' );
$ data = $ result ;
$ PDF =新しい Zfe_PDFGen ( $ data 、 '/html/files/test.pdf' );
$ PDF- > generate ();
それだけです
より良い/より便利なものは何ですか? まあ、少なくともPDFがレイアウトデザイナーの「ネイティブ」と「理解可能な」から生成されるという事実。
そして最も重要なことは、生成されたPDFが非常にきれいに見えることです。 速く動作します。
もちろん、短所でも十分です。
-全員が独自のサーバーを持っているわけではありません。
-exec()
-タグなどの画像へのPDFパスのテンプレートでは、完全に記述するか、テンプレートファイルに対して相対的に記述する必要があります。 これは完全に便利ではありません。