HTMLだとプリントするときに、個々のパソコンの設定によって背景が無かったりと印刷するものの見え方が変わってしまう。
それを避けるために、HTMLをPDFで書き出して、それを印刷するようにしたいとのことで。

調べるといろいろありますが、「mPDF」が多いようでした。

「mPDF」のサイト

関連記事

PHP で HTML から簡単に PDF を作れる mPDF

PHPでHTMLをPDF化する方法!

使用時には、使用バージョンに注意です。5.7.1以降はPH5.5以上が必要です。

文字化けした!

mPDFの文字化け修正方法

で、config.phpの「$this->useAdobeCJK = true」に訂正で、治りました。

 

タイムアウトした!

以下、ちょっと結論まで迷ったことも含めて書きますので、長くなりますが……
Fatal error: Maximum execution time of 60 seconds exceeded.というエラーが出ました。

タイムアウト……。

とある文字数以上だと、タイムアウトで終わってしまうと思っていたのですが、それは特定の文字で処理しきれていない問題みたいです。
しかも、<table>タグ内の言葉がだめなようです。
・「々」があると処理しきれない

・「(」の横に文字があると処理しきれない。(※「)」に関しては問題が出ない)

・[サワー]が駄目 「ー]」という組み合わせがひっかかっているようです。[サワー ]と、延ばした棒の前にスペースを入れると大丈夫。

・ジュースも駄目 ジュ ース と空白を入れてみるとOK。 ジュスーはOK。 ジュ ースはOK。ケチャップも駄目。以上のことから、小さな文字のあとに文字があるとダメなのかもと思い、ケチャ ッ プにしたらOK。

上記に書かれたことを気を付ければ、PDF化します。

スペースを入れたら解決したりするので、文字コードの処理とかなのかなぁと思ってしばらく考えていたのですが、テーブルのセルの横の数を減らすとうまくいくことに気付いて、

オーバーフローしているからか!と。
一つあたりのセルの幅に入りきらない文字は自動的に改行されるんですが、それがカッコとか小さい文字とかだと、かなり負荷がかかっているのかも。そこをスペースにしてやれば自動改行の判断がスムーズにいくのではないかと思いました。

ので、試しにPDFの出力さいずをA4からA4縦に

$mpdf=new mPDF(‘ja’, ‘A4-L’);

これでうまくいきました。そうか、オーバーフローの処理かぁ……(デザイナーさんに説明してたら、あっさり「オーバーフローしてたんか」と先んじて言われてショック)

 

スタイルシートがうまく読み込めない!

以下の記事を参考にしました。

mpdf ~phpからpdfを書き出すライブラリ

こちらに

//$mpdf->WriteHTML(file_get_contents(‘./style.css’), 1);

//↑ヘッダに書き込んだほうがトラブルが少ない模様

という記述があったので、それを参考にしました。

$css = file_get_contents(“../common/css/basic-style.css”);
$mpdf->WriteHTML($css,1);

こんな感じ。第2引数に「1」はスタイルシートとして読み込む意味。

WriteHTML()

 

まとめ

オーバーフローの記事とスタイルシートの読み込みさえうまくいけば、

HTMLタグの処理を一番理解してくれるライブラリではないかと思います。 

ただ、私がやったのは、データベースからコンテンツのHTMLを読み込んでそれをPDFにした方法で、サイト上にあるHTMLを読み込んでPDFにする方法は、元にあるHTMLのデータがめちゃくちゃ多かったからか(かなり行列の多いtableが複数個ある)、うまくいきませんでした。日本語対応させなかったときは日本語は出なくても形だけは出力してたので、日本語対応も負荷がかかっているのかもしれません。

その他、参考ページ

mPDFを試してみた(2)いくつかの問題点。CSSなど

mPDF 5.1で文字化け発生したので仕方なく・・・