Java 如何在Jasper Report PDF导出中自动打开书签?

Java 如何在Jasper Report PDF导出中自动打开书签?,java,jasper-reports,itext,bookmarks,export-to-pdf,Java,Jasper Reports,Itext,Bookmarks,Export To Pdf,从Crystal Reports导出PDF时,打开PDF时默认显示书签面板;但是,使用JasperReports时,默认情况下不会打开书签面板,必须手动打开 JasperReports如何导出打开时默认显示书签的PDF?AFIK jasper report中没有设置视图首选项(页面模式)的选项。我唯一的解决方案是用itext发布pdf(用于导出为pdf的库,已经在类路径中) 例子 我们将以PDF格式将jasper导出到内存流(ByteArrayOutputStream),然后使用itext的Pd

从Crystal Reports导出PDF时,打开PDF时默认显示书签面板;但是,使用JasperReports时,默认情况下不会打开书签面板,必须手动打开

JasperReports如何导出打开时默认显示书签的PDF?

AFIK jasper report中没有设置视图首选项(页面模式)的选项。我唯一的解决方案是用itext发布pdf(用于导出为pdf的库,已经在类路径中)

例子 我们将以PDF格式将jasper导出到内存流(
ByteArrayOutputStream
),然后使用itext的
PdfStamper
添加查看器首选项1


一,。链接到itext5 api,但请注意jasper reports实际上使用了一个特殊版本的itext 2.1.7参见maven dependence以获取更多信息

我不同意对这个问题的密切投票,它不太广泛(参见答案),它不是调试我的代码问题,也没有在jasper report中记录,因此它不需要mcve(如果没有记录,尝试会是什么?)。
//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();