iDempiereでPDF表示したレポートのタブを、いったん他のタブに切り替えて、再度そのタブに戻ると消えている場合があります。消えてしまってた場合は、オンラインレポートであればリフレッシュアイコンをクリックすると表示されますし、ジャスパーレポートの場合は、ブラウザの表示倍率を変更すると表示されます。
この事象は、Chromeのバグのようですが、iDempiere側で回避できるようになっておりますので、その方法について調査及び研究し、その結果をここにまとめておきたいと思います。
事象の再現方法
Chrome(クロム)系のブラウザでいったん、PDFレポートを表示します。下記の例はオンラインレポートの定型レポートです。
PDFのレポート表示後、他のタブにいったん切り替えます。
そして、もういちどPDFレポートが表示されているタブに戻ります。
そうすると上記のように、PDFレポートが表示されなくなっています。このような状況になったら、リフレッシュボタンを押して頂くか、ブラウザの表示倍率を変更する(Ctrl + "+" or ”-”)と、再度表示されます。
これは、Chrome(クロム)系のブラウザの不具合のようで、マイクロソフトのEdge(エッジ)でも再現されるのを確認しました。※ChromeもEdgeもエンジン部分は、Chromiumという同じエンジンで使用しているそうです。
ちなみに、Opera(オペラ)やBrave(ブレイブ)でも再現しました。T・T
回避方法
Chromiumの不具合との事ですが、iDempiereコミュニティーでは下記の通り回避できる方法を用意してくれています。
システムコンフィグ設定で「ZK_USE_PDF_JS_VIEWER」を「Y」にする
システムコンフィグ設定で上記の設定を"Y"にして下さい。これだけです。変更した後はキャッシュリセットを実行したあとで、確認して下さい。
しかし上記で対応できるのは、2020年10月18日修正された、IDEMPIERE-4497:Mobile: Update PDF.JS 以降になると思われます。iDempiereのバージョンでいうと8.2以降です。システムコンフィグ設定に「ZK_USE_PDF_JS_VIEWER」が無い場合は、対応できていないバージョンの可能性が高いです。
「ZK_USE_PDF_JS_VIEWER」を"Y"にする事で、PDF.jsのビューワーで表示されるように切り替わります。PDF.jsはJavaScriptで作られたPDFビューアとの事です。参照:「Qiita:PDF.jsを設置する」
上記での対応ができない場合は、下記の対応が必要になります。iDempiere ver6.2で試してみました。
◆ZkReportViewer#onPreviewReport()の修正
iDempiere8.2のZkReportViewer#onPreviewReport()をそのまま、iDempiere6.2の同じメソッドにコピー&ペーストして頂くだけです。これでオンラインレポーについては対応できるのではないかと思います。
◆ZkJRViewer#onRenderReport()の修正
iDempiere8.2のZkJRViewer#onRenderReport()とopenWithPdfJsViewer()をそのまま、iDempiere6.2に下記のようにコピー&ペーストして下さい。
変更すると、下記のようにPDFの表示枠組みが青くなりました。(@。@)