如何在 Jasper Report PDF 导出中自动打开书签?
How to open bookmarks automatically in Jasper Report PDF export?
从 Crystal Reports 导出 PDF 时,打开 PDF 时默认显示书签面板;但是使用JasperReports时,书签面板默认是不打开的,需要手动打开
JasperReports 如何导出打开时默认显示书签的 PDF?
AFIK 在 jasper-report 中没有 configuration 来设置视图首选项(页面模式)。我唯一的解决方案是 post 用 itext 详细说明 pdf(用于导出为 pdf 的库,已经在类路径中)
示例
我们会将 jasper 作为 PDF 导出到内存流 (ByteArrayOutputStream
),然后使用 itext 的 PdfStamper
添加查看器首选项 PageModeUseOutlines
1
//Get the JasperPrint object (exact code to achieve this intentional left out since command depends on application)
JasperPrint jasperPrint = JasperFillManager.fillReport(...);
//Export to pdf into a memory stream
JRPdfExporter exporter = new JRPdfExporter();
exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
ByteArrayOutputStream memoryStream = new ByteArrayOutputStream();
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(memoryStream));
SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration();
exporter.setConfiguration(configuration);
exporter.exportReport();
//Use stamper to set viewer prederence
PdfReader pdfReader = new PdfReader(new ByteArrayInputStream(memoryStream.toByteArray()));
PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileOutputStream("my.pdf"));
pdfStamper.getWriter().setViewerPreferences(PdfWriter.PageModeUseOutlines);
pdfStamper.close();
pdfReader.close();
1. Link is to itext5 api, 但注意jasper-reports实际上使用了一个特殊版本的itext 2.1.7 更多信息见maven依赖
从 Crystal Reports 导出 PDF 时,打开 PDF 时默认显示书签面板;但是使用JasperReports时,书签面板默认是不打开的,需要手动打开
JasperReports 如何导出打开时默认显示书签的 PDF?
AFIK 在 jasper-report 中没有 configuration 来设置视图首选项(页面模式)。我唯一的解决方案是 post 用 itext 详细说明 pdf(用于导出为 pdf 的库,已经在类路径中)
示例
我们会将 jasper 作为 PDF 导出到内存流 (ByteArrayOutputStream
),然后使用 itext 的 PdfStamper
添加查看器首选项 PageModeUseOutlines
1
//Get the JasperPrint object (exact code to achieve this intentional left out since command depends on application)
JasperPrint jasperPrint = JasperFillManager.fillReport(...);
//Export to pdf into a memory stream
JRPdfExporter exporter = new JRPdfExporter();
exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
ByteArrayOutputStream memoryStream = new ByteArrayOutputStream();
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(memoryStream));
SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration();
exporter.setConfiguration(configuration);
exporter.exportReport();
//Use stamper to set viewer prederence
PdfReader pdfReader = new PdfReader(new ByteArrayInputStream(memoryStream.toByteArray()));
PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileOutputStream("my.pdf"));
pdfStamper.getWriter().setViewerPreferences(PdfWriter.PageModeUseOutlines);
pdfStamper.close();
pdfReader.close();
1. Link is to itext5 api, 但注意jasper-reports实际上使用了一个特殊版本的itext 2.1.7 更多信息见maven依赖