html-pdf-generator

PDFファイルを出力したいならWEBページもPDF出力できる ワードプレス の プラグインが簡単。

時々欲しくなるPDF出力機能。例えば、申込フォームから入力した内容をPDFでダウンロードしてもらう。

はたまた、ECサイトの注文をPDF出力してあげる。ワードプレスでPDFが出力で来たらどんなに便利だろう。


PDF出力は、ワードプレスのプラグインを使うのが簡単

PDFにしてしまえば、印刷プログラムなども書かなくてよくなります。

プログラム仕様にWEBページの印刷要求がある場合でもPDFに出してしまえばいいですよねで終わってしまう。

ワードプレスをプラットフォームにしてしまうというのは、システム開発にかなり有効な手段です。


PDFを出力するワードプレスプラグイン

PDFを出力するワードプレスのプラグインは、結構でています。

でも、多くは、WEBページ出力といわれるタイプのもので、投稿ページ全体を出力していまいます。

そうなると請求書などといったものには使えません。

PDF出力プラグインに必要な機能は、ページの必要な部分だけPDFに出力する機能です。

ですが、それだけだと実は困る場面が出てきます。

それは、レスポンシブタイプのテーマを使っていると出力のイメージがかわってしまうwww


PDF出力モジュール

いろいろ組み込んでPDF出力させてみましたけが、使いやすいモジュールに TCPDF があります。

ワードプレスのPDF出力プラグインでも TCPDF をベースにしているプラグインは多いです。

TCPDFは、標準出力へ出力されたデータをPDF化するタイプのモジュールのため、無理が効くんですね。


PDF出力プラグインなら html-pdf-generator が使いやすい

PDF出力プラグインなら html-pdf-generator が使いやすい。

html-pdf-generator ダウンロードサイト

html-pdf-generator の インストール

※ダウンロードした html-pdf-generator は、プラグイン⇒新規追加⇒プラグインのアップロード⇒ファイル選択(html-pdf-generatorのzpiを指定)⇒今すぐインストール⇒有効化でインストールします。

html-pdf-generatorは、設定がまったくありません。

投稿の中にタグを埋め込むだけで使えます。


本ページの以下のブロックを出力する場合

[pdfg_shortcode]
<h3 class="style3a">PDF出力テスト</h3>
<a href="https://wppart.yuzumaru.co.jp/wp-content/uploads/2018/11/konsento.gif"><img src="https://wppart.yuzumaru.co.jp/wp-content/uploads/2018/11/konsento.gif" alt="" width="256" height="256" class="aligncenter size-full wp-image-984" /></a>
[/pdfg_shortcode]


以下のプリンターアイコンをクリックするとPDFのダウンロードになります。
[pdfg_shortcode]

PDF出力テスト

[/pdfg_shortcode]

基本的にPDFにしたい投稿部分をタグでくくることでPDFを出力することが可能です。


html-pdf-generator 日本語対応

html-pdf-generator は、バージョンによってなのかは不明ですけど、日本語が化けます。

対策として、
1、日本語フォントを入手します。
2、html-pdf-generator/includes/fonts/ に日本語フォントをアップロードします。
3、日本語フォントを指定する。

1、日本語フォントを入手します。

TCPDFから TCPDF をダウンロードしてきます。

2、html-pdf-generator/includes/fonts/ に日本語フォントをアップロードします。

TCPDFに入っている tcpdf\fonts の中から kozgopromedium.php を html-pdf-generator/includes/fonts/ にアップロードします。

3、日本語フォントを指定します。


html-pdf-generator/pdfg-shortcode.php を開いて、$this->SetFont( を検索します。

$this->SetFont(‘helvetica’, ”, 10); のように、フォントが指定されているところを、

$this->SetFont(‘kozgopromedium’, ”, 10); に置き換えて UFT8 で保存します。

たぶん、3か所ぐらいあります。

※前述の$は、全角なのでコピペで使うときは半角にしてください。


html-pdf-generator のカスタマイズ

html-pdf-generatorのエンジンは、pdfg.php で設定されています。

カスタマイズの本体は、pdfg-shortcode.php にあります。

function pdfg_shortcode_func( $atts, $content = null ) {
$args = shortcode_atts( array('title' => "), $atts );
ob_start();
?>
<div class="pdfg-shortcode">
<div class="pdfg-wrap">
<a class="pdfg-print" title="<?php _e('Print','pdfg'); ?>" href="javascript:void(0)"></a>
</div>
<div class="pdfg-content"><?php echo $content; ?></div>
<form name="pdfg-form" class="pdfg-form" method="post" action="" style="display:none;">
<textarea name="pdfg_print_html" class="pdfg-html"></textarea>
</form>
</div>
<?php
return ob_get_clean();
}
add_shortcode( 'pdfg_shortcode', 'pdfg_shortcode_func' );


プリンターアイコンは、html-pdf-generator/assets/css の中のpdfg-front.cssで設定されています。

.pdfg-wrap a.pdfg-print{
background: rgba(0, 0, 0, 0) url("../images/printer-32.png") repeat scroll 0 0 / cover ;
display: inline-block;
height: 32px;
width: 32px;
}


ショートコードを書き換えるなどすることでアイコンを変更することも可能です。

PDFを出力する

カスタマイズ本体は、pdfg-shortcode.php にあり、pdfg-shortcode.phpは、ショートコードを前述のpdfg_shortcode_func で処理させています。

dfg_shortcode_func は、PDF出力のトリガーで、その本体は、pdfg-shortcode.php の pdfg_shortcode_func 以降にある展開されたソース if(isset($_POST[‘pdfg_print_html’])) 以降にあります。

ボディは、

$pdf = new PDFG(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, ‘UTF-8′, false);

の部分ですが、PDFG は、その前の CLASS で継承されているTCPDFです。

TCDPDFを直接カスタマイズすると流用できなくなりますので、TCPDFを継承したクラスだけ作ってしまいます。

class PDFG extends TCPDF
{
}


※上記のPDFG は、ヘッダ、フッダの関数を持たない点に注意してください。
※面倒ならCLASSを以下のように記述してもOKです。

class PDFG extends TCPDF
{
//PDF Page header
public function Header()
{
}
// PDF Page footer
public function Footer()
{
}
}



その後これを関数にして呼び出せば直接ファイルに出力することができます。

/********************************************************/
function pdf_write($html,$file,$possible='P',$paper='A4')
/********************************************************/
{
class PDFG extends TCPDF
{
//PDF Page header
public function Header()
{
}
// PDF Page footer
public function Footer()
{
}
}
$header_margin = 0;
$pdf = new PDFG(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
// set document information
$pdf->SetCreator(PDF_CREATOR);
// set header and footer fonts
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, ", PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, ", PDF_FONT_SIZE_DATA));
// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
// set margins
$_marginTop = $header_margin*0.352777778; // convert "pixel" value into "mm" (1px = 0.352777778mm for 72dpi)
$pdf->SetMargins(PDF_MARGIN_LEFT, $_marginTop+8, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
// set auto page breaks
$pdf->SetAutoPageBreak(TRUE, 22);
// set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
// set some language-dependent strings (optional)
if (@file_exists(dirname(__FILE__).'/lang/eng.php')) {
require_once(dirname(__FILE__).'/lang/eng.php');
$pdf->setLanguageArray($l);
}
// ———————————————————
// add a page $possible,$paper
$pdf->AddPage($possible, $paper);
//$pdf->SetFont('helvetica', ", 10);
$pdf->SetFont('kozgopromedium', ", 10);
$pdf->SetTextColor(0, 0, 0);
ob_start();
$pdfHtml .= <<<EOD
$html
EOD;
$pdf->writeHTML($pdfHtml, true, false, false, false, ");
ob_end_clean();
$pdf->Output($file,'F'); // F:ファイル出力
}


$html = <<< EOF
<style>
h1 {
font-size: 16px;
color: #333;
}
ul {
list-style-type: none;
}
ul li {
text-decoration: underline;
}
</style>
<h1>マイブログ。</h1>
<ul>
<li>サイト制作</li>
<li>HTML/CSS</li>
<li>JavaScript</li>
<li>WordPress</li>
<li>PHP</li>
</ul>
EOF;
$file = DOWNLOAD_DIR.'/test.pdf';
$urls = DOWNLOAD_URL.'/test.pdf';
pdf_write($html,$file,'P','A4');


$html にPDFの内容を記載することでPDFファイルをかきだすことができます。

html-pdf-generator を使う時の注意点

html-pdf-generatorは、TCPDFを利用しています。
その TCPDFは、標準出力を利用してPDFを作っています。

そのため「HTML出力時にスタイルシートが効かない」ことがあります。
その場合には、前述のサンプルのように、出力するHTMLに加えて、そのHTMLに影響を与えるスタイルシートをくっつけて書きだす必要があります。

ワードプレスの投稿の場合、ビジュアルエディタを使っていると勝手に改行(br)が入ったり、空行が捨てられたりしますので、その点も考慮しないといけません。


スポンサードリンク