お客様は Jasper ビューアを気に入ってくれていますが、問題があります。データをいくつかの異なる形式 (PDF、Excel、CSV、HTML など) にエクスポートしますが、顧客は PDF にのみエクスポートしたいと考えています。
ユーザーがデータをエクスポートするために選択できる唯一の形式が PDF になるように、Jasper Viewer をどのようにカスタマイズできますか?
お客様は Jasper ビューアを気に入ってくれていますが、問題があります。データをいくつかの異なる形式 (PDF、Excel、CSV、HTML など) にエクスポートしますが、顧客は PDF にのみエクスポートしたいと考えています。
ユーザーがデータをエクスポートするために選択できる唯一の形式が PDF になるように、Jasper Viewer をどのようにカスタマイズできますか?
私の意見ではひどい解決策を見つけましたが、私の場合はうまくいきました。
さて、JasperViewer クラスのソース コードを読むと、そのクラスに viewer という名前の保護フィールドが見つかりました。
だから、私がしなければならなかったのは、次のようなコードを書くことだけでした:
Field jrViewerField;
try {
jrViewerField = viewer.getClass().getDeclaredField("viewer");
jrViewerField.setAccessible(true);
JRViewer jrViewer = (JRViewer) jrViewerField.get(viewer);
List<JRSaveContributor> savers = new ArrayList<JRSaveContributor>();
for (JRSaveContributor sc : jrViewer.getSaveContributors()) {
savers.add(sc);
}
for (JRSaveContributor sc : savers) {
if (! sc.getClass().getName().toLowerCase().contains("pdf")) {
jrViewer.removeSaveContributor(sc);
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
これは美しいソリューションではありませんが、少なくとも 3.7.1 バージョンの Jasper Reports では機能しました。システムの別のバージョンで動作する可能性のある保証はありません。したがって、それが最後のリソースである場合にのみ、このソリューションを使用しないことを強くお勧めします.
PDF のみを許可する SaveContributor を設定しないのはなぜですか? 例)JRPdfSaveContributor。
JRViewer viewer = new JRViewer(jrPrint);
viewer.setSaveContributors(new JRSaveContributor[] { new JRPdfSaveContributor(Locale.getDefault(), null) });
\apache-tomcat-7.0.12\webapps\jasperserver\WEB-INF\flows から viewReportsBean.xml を開きます
ドキュメントの最後までスクロールし続けると、次の行が表示されます
<entry key="pdf" value-ref="pdfExporterConfiguration"/>
<entry key="xls" value-ref="xlsExporterConfiguration"/>
<entry key="csv" value-ref="csvExporterConfiguration"/>
<entry key="docx" value-ref="docxExporterConfiguration"/>
<entry key="rtf" value-ref="rtfExporterConfiguration"/>
<entry key="swf" value-ref="swfExporterConfiguration"/>
<entry key="odt" value-ref="odtExporterConfiguration"/>
<entry key="ods" value-ref="odsExporterConfiguration"/>
<entry key="xlsx" value-ref="xlsxExporterConfiguration"/>
<!-- entry key="txt" value-ref="txtExporterConfiguration"/
</util:map>
コメントタグを追加して無効にするだけで完了です!! 幸せなコーディング...
<entry key="pdf" value-ref="pdfExporterConfiguration"/>
<!-- <entry key="xls" value-ref="xlsExporterConfiguration"/> -->
<!--<entry key="csv" value-ref="csvExporterConfiguration"/> -->
<!--<entry key="docx" value-ref="docxExporterConfiguration"/> -->
<!--<entry key="rtf" value-ref="rtfExporterConfiguration"/> -->
<!--<entry key="swf" value-ref="swfExporterConfiguration"/> -->
<!--<entry key="odt" value-ref="odtExporterConfiguration"/> -->
<!--<entry key="ods" value-ref="odsExporterConfiguration"/> -->
<!--<entry key="xlsx" value-ref="xlsxExporterConfiguration"/> -->
<!-- entry key="txt" value-ref="txtExporterConfiguration"/-->
</util:map>