我有一个Jasper报告,该报告在Java Spring中创建了PDF。我一直在尝试将缩放级别更改几个小时,但没有成功。每当我使用Adobe Reader打开pdf时,它的149%(甚至更糟糕)。有一个类似的question并没有帮助。
我尝试了以下属性名称,但没有一个起作用
我尝试过的值是
我已经检查了我的Adobe Reader属性,并且缩放设置为默认值,并且accessibility也处于关闭状态。
如Villat中所示的comment所示,设置缩放等级的一种方法是“ this.zoom=50;
”
您可以通过在jrxml中进行指示来执行此操作
<property name="net.sf.jasperreports.export.pdf.javascript" value="this.zoom=50;"/>
或[>]
如果从Java导出,则将其设置为SimplePdfExporterConfiguration
.... SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration(); configuration.setPdfJavaScript("this.zoom=50;"); exporter.setConfiguration(configuration);
但是
由读者(用于打开pdf的应用程序,决定是否/可以执行javascript。)>
例如,在标准Adobe Acrobat Reader DC中,用户可以在菜单Edit >> Preferences下手动将其关闭
此外,如果阅读器已经打开,似乎并不总是喜欢通过javascript更改缩放级别,那么我安装的阅读器只有在打开pdf时才能正常工作。
如果您使用Java进行导出,则可以添加一个OpenAction详细说明pdf,请参见Bruno Lowagie的答案https://stackoverflow.com/a/24095098/5292302
public void manipulatePdf(String src, String dest) throws IOException, DocumentException { PdfReader reader = new PdfReader(src); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); PdfDestination pdfDest = new PdfDestination(PdfDestination.XYZ, 0, reader.getPageSize(1).getHeight(), 0.75f); PdfAction action = PdfAction.gotoLocalPage(1, pdfDest, stamper.getWriter()); stamper.getWriter().setOpenAction(action); stamper.close(); reader.close(); }
因此一旦导出,您将调用类似的方法,如果内存允许,您也可以使用
ByteArrayOutputStream
或类似方法在内存中执行此操作。此解决方案更可靠,但最终,是否尊重用户始终取决于用户使用的读者。