2020-06-10

サイトに表示しているコンテンツ部分をPDF化する #craftcms

印刷対応というかPDFを作成したいという要件を、PDFにする内容をまずサイトに表示するページとして作って、それをPDF化するというのを試してみた。

ライブラリ入れたりAPI使えばやれそうなものもある。

Enupal Snapshot
https://plugins.craftcms.com/e...
Api2Pdf
https://plugins.craftcms.com/a...

とりあえず今回の環境はシンプルなレンタルサーバーを想定して、

Super PDF
https://plugins.craftcms.com/s...

を使ってみることにした。

サンプルコード

ソースコードとしてはドキュメントにあるようにこんな感じで

{% set html %}
<div class="container text-center m-8">
<p style="text-align:center">{{shopinfo.titleEn}}</p>
<div class="flex justify-center m-4" style="text-align:center">
  <img class="object-contain object-center w-64" src="{{shopinfo.shoplogo.one.getUrl('fit_480_480')}}" />
</div>
<p style="text-align:center">{{shopinfo.shopdescriptionEn|nl2br}}</p>
<div class="flex justify-center m-4" style="text-align:center">
  <img class="object-none object-center" src="{{ url(currentSite.baseUrl)|qrcode() }}">
</div>
</div>
{% endset %}

{% set settings = {
    filename: "My_PDF",
    type: 'url'
} %}
{% set url = craft.superpdf.html(html, settings) %}

<p>A4 PDF URL is: {{ url }}</p>

これでPDFのリンクが生成される。

PDFをブラウザで開いたところ。

PDF生成をカスタマイズする

ドキュメントにある設定値を渡すことで少し調整ができる

Introduction | Super PDF - Amici Infotech Documentation
https://docs.amiciinfotech.com...

たとえば B6 サイズにしてみる。 defaultPaperSize に値をセットする。

{% set settings2 = {
    filename: "My_PDF",
    type: 'url',
    defaultPaperSize:'b6'
} %}

{% set url2 = craft.superpdf.html(html2, settings2) %}

<p>B6 PDF URL is: {{ url2 }}</p>

B6のPDFが生成された。

よかったよかった。


PDFにするのも印刷対応に近いところがあるっぽくて、ブラウザでみてる時は問題なかったけど、CSSの書き方によっては意図した感じのPDFにならないところもあった。

とりあえず形になりそうな感じでよかった。
気づかず見落としてるところがありそうな気もするのでもう少し色々やってみよう。