WebプロジェクトでのPDFの生成:wkhtmltopdfプログラム

Webプロジェクトで作業する場合、大きなテーブル、数千のポジションの価格表を含むPDFファイルを生成することが必要になる場合があります。 PHPスクリプトからPDFファイルを生成するためのさまざまなライブラリがありました。



•FPDF

•MPDF-任意のhtmlコードからpdfファイルを生成できるFPDFベースのライブラリ

•DOMPDF

•TCPDF



その他の多くのライブラリ。 MPDFライブラリーが最も強力で適切であることが判明しました。また、この場合の重大な欠点ではない場合、最初はキリル文字を正しく使用していました。大きなテーブルと一般に大きなファイルは非常にゆっくり生成されました。 さらに、多くの場合、生成はまったく行われず、スクリプトは504エラーで停止しました。



さらに検索すると、wkhtmltopdfプログラムが見つかりました。 プログラムのウェブサイト: http : //wkhtmltopdf.org



PHPライブラリとは異なり、これは、Linux、Windows、およびその他のオペレーティングシステム用のパッケージおよび実行可能ファイルの形式で配布されるサーバープログラムです。 プログラムはhtmlコード(Webアドレス、ファイルパス、またはコード行の形式)を受け入れ、それに基づいてサーバー上でpdfファイルを生成します。



予備的な経験から、WindowsのローカルXAMPPサーバーでは、300〜500ページの巨大なHTMLテーブルが1〜2秒でPDFファイルに変換されることがわかりました。



CentOs 6にwkhtmltopdfをインストールします

このプログラムを使用するには、webkitとqtが必要です。



そのため、必要な環境とプログラムをサーバーにインストールします。 サーバーにCentOs 6がインストールされているので、ルート権限でサーバーにアクセスして、次のコマンドを実行します。



開発者のサイトからのリンクを使用してwkhtmltopdfプログラムのrpmパッケージを受け取り、本番サーバーにインストールします。



wget download.gna.org/wkhtmltopdf/0.12/0.12.2.1/wkhtmltox-0.12.2.1_linux-centos6-i386.rpm

yum --nogpgcheck localinstall wkhtmltox-0.12.2.1_linux-centos6-i386.rpm









すべてのパッケージの依存関係が自動的にチェックされ、満たされる必要があります。 何らかの理由で環境が確立されていない場合は、次のコマンドを使用します。



yum install urw-fonts libXext openssl-devel libXrender

yum install xorg-x11-fonts-cyrillic.noarch xorg-x11-fonts-misc.noarch xorg-x11-fonts-truetype.noarch xorg-x11-fonts-100dpi.noarch xorg-x11-fonts-75dpi.noarch fonts-ISO8859-2.noarch fonts-ISO8859-2-100dpi.noarch fonts-ISO8859-2-75dpi.noarch freefont.noarch









最近まで、プログラムはrpmパッケージとして提供されていなかったため、バイナリファイルをコピーして、必要なすべてのパッケージを手動でインストールする必要がありました。



CentOs 6でwkhtmltopdfを使用する

プログラムを起動するための一般的な形式は次のとおりです。



wkhtmltopdf <, .html> <, .pdf>









さらに、このプログラムでは、個別のhtmlファイルからドキュメントのヘッダーとフッターを自動的に埋め込むことができます。 このための構文は次のとおりです。



wkhtmltopdf --header-html <, .html> --footer-html <, .html> <, .html> <, .pdf>









また、プログラムを起動するためのオプションには、結果のPDFファイルのカスタムサイズフィールドがあります。 上下のフィールドで、プログラムはヘッダーとフッターを置き換えます。



wkhtmltopdf --margin-top 35mm --margin-bottom 27mm --margin-left 10mm --margin-right 10mm --header-html <, .html> --footer-html <, .html> <, .html> <, .pdf>









この例では:

•上マージン:35 mm

•下マージン:27 mm

•左右のマージン:各10mm



また、地下のコードの例を示します。 この例では、ページ番号が自動的に生成され、地下室に置き換えられます。 したがって、ドキュメントのページには自動的に番号が付けられます。



//















また、プログラムを起動するための便利なオプションの中には:



-encoding-ソースhtmlファイルのエンコーディングを指定します。例:

--encoding windows-1251









-ページサイズ-ページ形式を指定します。例:

--page-size A4









-向き-ページの向き。例:

--orientation Landscape









このWebプロジェクトでは、pdfファイルを形成するphpページで使用されるphpコードは次のとおりです。

$tmp=time();



$f=fopen(ABSPATH.'/tmp/'.$tmp.'.html','w');

fputs($f, $llg);

fclose($f);



$cd = "cd ".ABSPATH.'/tmp';

exec($cd);

$command = "wkhtmltopdf-i386 --margin-top 35mm --margin-bottom 27mm --margin-left 10mm --margin-right 10mm --footer-html ".ABSPATH."/tpl-sm/pl_pdf/pdf_footer.html --header-html ".ABSPATH."/tpl-sm/pl_pdf/pdf_header.html ".ABSPATH.'/tmp/'.$tmp.'.html'." ".ABSPATH.'/tmp/'."$tmp.pdf";



exec($command);

if (file_exists(ABSPATH.'/tmp/'.$tmp.'.pdf')) {

header('Content-type: application/pdf');

header('Content-Disposition: attachment; filename="pricelist.pdf"');

readfile(ABSPATH.'/tmp/'.$tmp.'.pdf');

}

unlink(ABSPATH.'/tmp/'.$tmp.'.pdf');

unlink(ABSPATH.'/tmp/'.$tmp.'.html');









このコードでは:

•変数$ llg-価格表のHTMLコードを含む

•ABSPATH定数-サーバー上のWebプロジェクトフォルダーへの絶対パス。

コードは次のことを行います。

•価格表のHTMLコードを一時ファイルに書き込みます。

•一時ディレクトリに移動します。

•必要なオプションを指定してwkhtmltopdfを実行します。

•pdfファイルが正常に作成された場合、ブラウザでユーザーに返され、pricelist.pdfという名前でファイルをダウンロードするように提案します。

•一時ディレクトリから一時HTMLおよびPDFファイルを削除します。



All Articles