(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変換はシングル動作となります。多重で処理は行われないため、前の変換処理が終わらないと次の処理が始まらないため処理のボトルネックが生じないように、リクエストを調整してください。
    • https://www.adobe.com/jp/products/coldfusion-family/buying-guide.html
      ※HTMLからのPDFファイルの生成が「機能制限あり」となり、ページ下部に”ColdFusion Standard Editionの機能制限:Enterpriseの各機能は、Enterprise Feature Router(EFR)を介して実行されます。Standard Editionで実行されます。ただし、EFRを介して実行される機能は、いずれも一度のリクエストにつき1つずつ処理されます。”の説明があります
       
  • Jettyサーバー(Add-onサービス)には、標準で512Mの最大ヒープサイズが設定されていますが、PDF生成エンジン2.0ではメモリ不足を引き起こします。少なくとも 1024MB またはそれ以上のヒープに変更することを推奨します。
    (※このことは開発元のオンラインマニュアルのページでも記載されています)
    • 変更方法はWindows と Windows以外とで対象ファイルが異なります。以下は1024MBに変更する例です
      • Windows の場合
        1. ColdFusion 2023 Application Serverサービスを停止します
        2. ColdFusion 2023 Add-on Servicesサービスを停止します
        3. [cf_root]/{インスタンス(cfusion等)}/jetty(例:C:\ColdFusion2023\cfusion\jetty)内のjetty.laxをメモ帳テキストエディタで開きます
        4. 「lax.nl.java.option.additional=」の行で始まるJVM引数に「-Xmx512m」がありますので、それを「-Xmx1024m」に変更してファイルを保存します
        5. ColdFusion 2023 Add-on Servicesサービスを起動します
        6. ColdFusion 2023 Application Serverサービスを起動します
           
      • Windows 以外の場合
        1. ColdFusion 2023 を停止します(例:/opt/ColdFusion2023/cfusion/bin/coldfusion stop または systemctl stop cf2023)
        2. jettyを停止します(例:/opt/ColdFusion2023/jetty/cfjetty stop)
        3. [cf_root]/{インスタンス(cfusion等)}/jetty(例:/opt/ColdFusion2023/jetty/)内のcfjettyをvi等で開きます
        4. 「JVMARGS=」の行で始まるJVM引数に「-Xmx512m」がありますので、それを「-Xmx1024m」に変更して保存します
        5. jettyを起動します(例:/opt/ColdFusion2023/jetty/cfjetty start)
        6. 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").
        1. ColdFusion 2023 を停止します(例:/opt/ColdFusion2023/cfusion/bin/coldfusion stop または systemctl stop cf2023)
        2. jettyを停止します(例:/opt/ColdFusion2023/jetty/cfjetty stop)
        3. [cf_root]/{インスタンス(cfusion等)}/jetty(例:/opt/ColdFusion2023/jetty/)内のcfjettyをvi等で開きます
        4. 「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 ...
        5. jettyを起動します(例:/opt/ColdFusion2023/jetty/cfjetty start)
        6. 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日


x

Sample Modal Window

This is just a sample…

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent suscipit iaculis libero sed tristique. Quisque mollis dolor non tellus placerat vitae sodales lectus porta. Curabitur ut suscipit tellus. Maecenas rhoncus, ante vitae vehicula vestibulum, metus sapien dapibus tellus, et mattis dolor neque vitae nisl. Nullam eleifend ultrices ipsum eget pretium. Curabitur semper metus ut ante adipiscing nec volutpat sem rutrum. Nullam a nisi lacus, non interdum ante. Vivamus ante augue, commodo vel egestas sed, pharetra nec dui. Quisque sed tellus felis. Donec ipsum mauris, sagittis eu accumsan in, aliquam non ipsum.

Vestibulum tempor nunc nec felis scelerisque eget elementum erat dignissim. Ut vel ipsum mollis orci venenatis luctus. Aenean vehicula quam vel quam porttitor ac iaculis elit pulvinar. Proin consequat, ipsum eu venenatis semper, justo turpis posuere tortor, ac placerat metus nisl et lectus. Nulla cursus dui id nunc ullamcorper sed semper nisl lobortis. Aliquam erat volutpat. Phasellus arcu ante, imperdiet in ornare sed, laoreet eu massa.