WordPressで帳票をPDF出力するには[wkhtmltopdf] on CentOS

   

WordPressで入力したデータを整形してPDF出力がしたい。そんな時の手順。

PDF出力側はこちらを参照:PHPでPDFを作成する時はwkhtmltopdf + snappyで戦え

基本的にはここに書いてある順番に実行すれば大丈夫だと思います。

環境:CentOS6.7

wkhtmltopdfのインストール

cd /usr/local/src
wget http://download.gna.org/wkhtmltopdf/0.12/0.12.2.1/wkhtmltox-0.12.2.1_linux-centos6-amd64.rpm
rpm -ivh wkhtmltox-0.12.2.1_linux-centos6-amd64.rpm

書かれている通り、依存関係で足りないものがあればyum使ってインストールしてください。

日本語フォントのインストール

wget http://dl.ipafont.ipa.go.jp/IPAexfont/IPAexfont00301.zip
unzip IPAexfont00301.zip
mv IPAexfont00301 /usr/share/fonts

 

 

snappyの導入

composerが入ってないと使えないので入ってない場合はインストール。

composerインストール

cd ~
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

composerと打ってCOMPOSERって派手な画面が出ればOK。

snappy導入

composerはプロジェクト毎なので、まずはWordpressの wp-contentの中に移動。

composer require knplabs/knp-snappy

 

 

これでOK。はい簡単!

functions.phpをいじる

と、言いつつ、PDF帳票のHTMLが膨大になるので別ファイルにしたいという事で、ThemeフォルダにgeneratePDF.phpというファイルを作って保存。functions.phpから読み込む形にした。

functions.phpにこちらを書き込む。同階層にあるのでファイル名だけかけば読み込んでくれる。

include_once('generatePDF.php');

次に、generatePDF.phpを作る。
あるpost_idの時に、PDFダウンロード用のリンクを出力して、それをクリックするとPDFがダウンロードされる。
カスタムフィールドの値等は、適宜読み込んであげればPDFに出力することが出来る。

<?php
  
//----------------------------------------
//キーを追加するためのフィルターフック
//----------------------------------------
//$public_query_varsに、キーを渡す
function add_meta_query_vars( $public_query_vars ) {
     $public_query_vars[] = 'outputpdf';
     return $public_query_vars;
}
//add_meta_query_vars関数を実行
add_filter( 'query_vars', 'add_meta_query_vars' );
  
function pdfgenerate(){
    if( $post_id == 'ポストIDを指定'){
    
    echo "<a href='". $_SERVER["REQUEST_URI"] ."?outputpdf=y' target='_blank'>ダウンロードボタン</a>";
    
    $pdfquery = get_query_var('outputpdf');
    if( $pdfquery == 'y'){
    	
// 変数を読み込む例
 $title_to_pdf = get_the_title($post_id);

    	require_once '/var/www/適宜パスつなげてくださいwp-content/vendor/autoload.php';
$html = <<<EOT
<!DOCTYPE html>
<html>
<head></head>
<body>
ここに中身を書く

<h1>$res_title</h1>

</body>
</html>

EOT;
// wkhtmltopdfの位置をコンストラクタに渡す
$pdf = new KnpSnappyPdf('/usr/local/bin/wkhtmltopdf');

// encoding = utf-8をセット
$pdf->setOption('encoding', 'utf-8');

// PDFをブラウザに出力してダウンロード
header('Content-Disposition: attachment; filename="'.date("Ymd").'.pdf"');
header("Content-Type: application/pdf");
echo $pdf->getOutputFromHtml($html);

    }
}
}
add_action( '適当なフック', 'pdfgenerate',10,2);

こんな感じです。

URLに &outputpdf=y というパラメータがついていたら、PDFが出力されるようにした。
例えば、
https://geeorgey.com/mypdf/
みたいなページだったら
https://geeorgey.com/mypdf/?outputpdf=y
というアクセスになるとPDF出力されるようになる。

wkhtmltopdfがとても良い

今まで、PDF出力って、枠からはみ出る…とか、思うように表示できない…といったイメージが有りましたが、wkhtmltopdfはHTMLをそのままPDF変換してくれるのでとてもよい感じです。

スタイル付けておくと便利です

HTMLのヘッダ部分にスタイルを追加しました。

<style type="text/css">
    hr { page-break-after: always; }
    tr {
    page-break-inside: avoid;
    }
</style>

hrが入ったら、改ページが入るように。
trの設定は、これやっとくと表組みが改ページにかかっちゃった場合にきちんと表示してくれるおまじないです。

オススメNginx本

nginx実践入門 (WEB+DB PRESS plus) 単行本(ソフトカバー) – 2016/1/16

nginxを現場で活用するための知識を、実践的なノウハウを交えて解説した書籍です。nginxのインストール方法や基本的な設定方法からはじめ、nginxを利用した「静的コンテンツ配信サーバ」「HTTPSサーバ」「Webアプリケーションサーバ」「大規模コンテンツ配信システム」の構築方法をそれぞれ詳しく紹介しています。後半ではnginxサーバのモニタリングやログの収集、そして軽量スクリプト言語Luaでnginxを拡張する方法について解説しているので、nginxをこれから使う方はもちろん、さらに活用したい方にもお勧めです。

 - Wordpress