- Home
- » よくある質問(FAQ)
- » タグ・関数・構文など
- » (cf2023~)cfhtmltopdf使用時の注意事項について
ColdFusion 2023から<cfhtmltopdf>のデフォルトエンジンが変わり、PDFG(PDF Generator:PDF生成エンジン) 2.0が導入されました。
従来の<cfhtmltopdf>も、高品位のHTML→PDF変換が行えましたが、より新しいPDFGでは以下のことも可能となりました。
- SVG
- CSS Flexible Box レイアウト
- CSS グリッド レイアウト
- PDF/A への準拠
- キャンバス要素のレンダリング
- JavaScript による動的レンダリング
新しいPDFGは、これまでのcfhtmltopdfと同様にJettyサーバー(Add-onサービス)内で実行されますが、生成エンジンがこれまでとはまったくの別物です。cfhtmltopdfの属性などは従来と同じものを継承していますが変換処理はまったく異なるため、ColdFusion 11~2021で<cfhtmltopdf>を使用していた場合は、ColdFusion 2023で動作のチェックを必ず行ってください。
また、いくつかの注意点や制限事項などについても紹介します。
- <cfdocument>と同様、Standard版ではcfhtmltopdfのPDF変換はシングル動作となります。多重で処理は行われないため、前の変換処理が終わらないと次の処理が始まらないため処理のボトルネックが生じないように、リクエストを調整してください。
- Jettyサーバー(Add-onサービス)には、標準で512Mの最大ヒープサイズが設定されていますが、PDF生成エンジン2.0ではメモリ不足を引き起こします。少なくとも 1024MB またはそれ以上のヒープに変更することを推奨します。
(※このことは開発元のオンラインマニュアルのページでも記載されています)
- 変更方法はWindows と Windows以外とで対象ファイルが異なります。以下は1024MBに変更する例です
- Windows の場合
- ColdFusion 2023 Application Serverサービスを停止します
- ColdFusion 2023 Add-on Servicesサービスを停止します
- [cf_root]/{インスタンス(cfusion等)}/jetty(例:C:\ColdFusion2023\cfusion\jetty)内のjetty.laxをメモ帳テキストエディタで開きます
- 「lax.nl.java.option.additional=」の行で始まるJVM引数に「-Xmx512m」がありますので、それを「-Xmx1024m」に変更してファイルを保存します
- ColdFusion 2023 Add-on Servicesサービスを起動します
- ColdFusion 2023 Application Serverサービスを起動します
- Windows 以外の場合
- ColdFusion 2023 を停止します(例:/opt/ColdFusion2023/cfusion/bin/coldfusion stop または systemctl stop cf2023)
- jettyを停止します(例:/opt/ColdFusion2023/jetty/cfjetty stop)
- [cf_root]/{インスタンス(cfusion等)}/jetty(例:/opt/ColdFusion2023/jetty/)内のcfjettyをvi等で開きます
- 「JVMARGS=」の行で始まるJVM引数に「-Xmx512m」がありますので、それを「-Xmx1024m」に変更して保存します
- jettyを起動します(例:/opt/ColdFusion2023/jetty/cfjetty start)
- ColdFusion 2023 を起動します(例:/opt/ColdFusion2023/cfusion/bin/coldfusion start または systemctl start cf2023)
- UCS-2に含まれない文字も一部使用することができるようになりましたが、サロゲートペア文字やIVS(Ideographic Variation Sequence:異体字シーケンス)には対応していません。
- cfhtmltopdfが動作しないときは、PDFg側のログを確認します。以下はLinuxでcfhtmltopdfが動かなかった時の調査例です
- 対象ファイルは[cf_root][cf_root]/{インスタンス(cfusion等)}/jetty/logs(例:/opt/ColdFusion2023/cfusion/jetty/logs)内のhtmltopdf_2_conversion.log.0。
- 以下のようなエラーが発生していたので、指示に沿って-Djava.awt.headless=trueを追加しました。
15/09/2023 01:41:27.518 - [coldfusion.pdf.service.a.a] - [SEVERE] - [pool-2-thread-3] Trying to run PDFreactor without a graphical environment. To run PDFreactor in this environment, you need to enable headless mode by setting the appropriate system property (i.e. "-Djava.awt.headless=true").
- ColdFusion 2023 を停止します(例:/opt/ColdFusion2023/cfusion/bin/coldfusion stop または systemctl stop cf2023)
- jettyを停止します(例:/opt/ColdFusion2023/jetty/cfjetty stop)
- [cf_root]/{インスタンス(cfusion等)}/jetty(例:/opt/ColdFusion2023/jetty/)内のcfjettyをvi等で開きます
- 「JVMARGS="...."」のエントリの任意の場所に「 -Djava.awt.headless=true 」を追加します。スペース区切りで改行は入れないようにします。
例:
--add-opens=java.base/jdk.internal.ref=ALL-UNNAMED -XX:+ScavengeBeforeFullGC -XX:-UseParallelGC ...
↓
--add-opens=java.base/jdk.internal.ref=ALL-UNNAMED -Djava.awt.headless=true -XX:+ScavengeBeforeFullGC -XX:-UseParallelGC ...
- jettyを起動します(例:/opt/ColdFusion2023/jetty/cfjetty start)
- ColdFusion 2023 を起動します(例:/opt/ColdFusion2023/cfusion/bin/coldfusion start または systemctl start cf2023)
- 従来の<cfhtmltopdf>は、Linux版の生成エンジンの機能制限(<cfhtmltopdfitem type="pagebreak" />が動作しない)など、変換エンジン側の制限がありましたが、この制限は無くなりました。
また、Linux環境では使用するライブラリ・フォントも事前にインストールする必要がありましたが、ColdFusion 2023では必要なくなりました。
記事公開日:2023年09月15日
最終更新日:2023年09月15日