当JasperReport导出的文档为PDF/A模式时,该PDF为只读可以防止被修改。
-
设置导出参数
JRPdfExporter exporter = new JRPdfExporter();
exporter.setExporterInput(SimpleExporterInput.getInstance(jasperPrints));
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(filePath));// 设置支持SVG显示 // SimplePdfReportConfiguration pdfReportConfiguration = new SimplePdfReportConfiguration(); // pdfReportConfiguration.setForceSvgShapes(true); // exporter.setConfiguration(pdfReportConfiguration); // 配置 PDF 属性 SimplePdfExporterConfiguration exportConfig = new SimplePdfExporterConfiguration(); exportConfig.setPdfVersion(PdfVersionEnum.VERSION_1_7); exportConfig.setPdfaConformance(PdfaConformanceEnum.PDFA_1A); //高级配置:PDF/X-1a:2001 exportConfig.setIccProfilePath("D:/CNFRD2.ICC"); exportConfig.setMetadataAuthor("作者姓名"); exportConfig.setMetadataCreator("创建者姓名"); exportConfig.setMetadataTitle("PDF 标题"); exportConfig.setMetadataSubject("PDF 主题"); exportConfig.setMetadataKeywords("关键字1, 关键字2"); exporter.setConfiguration(exportConfig); exporter.exportReport();
其中ICC文件可以在Windows系统找到对应的内容,具体路径在C:\Windows\System32\spool\drivers\color里面。
- 定义导出字体
创建jasperreports_extension.properties文件在resources目录下:
net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
net.sf.jasperreports.extension.simple.font.families.fonts=jasperreport/fonts/fonts.xml
其中fonts.xml文件内容如下所示
<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
<fontFamily name="Microsoft YaHei UI">
<normal>classpath:jasperreport/fonts/mysh.ttf</normal>
<bold>classpath:jasperreport/fonts/mysh.ttf</bold>
<italic>classpath:jasperreport/fonts/mysh.ttf</italic>
<boldItalic>classpath:jasperreport/fonts/mysh.ttf</boldItalic>
<pdfEncoding>Identity-H</pdfEncoding>
<pdfEmbedded>true</pdfEmbedded>
<exportFonts>
<export key="net.sf.jasperreports.html">'Microsoft YaHei UI'</export>
</exportFonts>
</fontFamily>
<fontFamily name="思源黑体 CN Regular">
<normal>classpath:jasperreport/fonts/AlibabaPuHuiTi-2-55-Regular.ttf</normal>
<bold>classpath:jasperreport/fonts/AlibabaPuHuiTi-2-55-Regular.ttf</bold>
<italic>classpath:jasperreport/fonts/AlibabaPuHuiTi-2-55-Regular.ttf</italic>
<boldItalic>classpath:jasperreport/fonts/AlibabaPuHuiTi-2-55-Regular.ttf</boldItalic>
<pdfEncoding>Identity-H</pdfEncoding>
<pdfEmbedded>true</pdfEmbedded>
<exportFonts>
<export key="net.sf.jasperreports.html">'思源黑体 CN Regular'</export>
</exportFonts>
</fontFamily>
<fontFamily name="思源黑体 CN Bold">
<normal>classpath:jasperreport/fonts/AlibabaPuHuiTi-2-85-Bold.ttf</normal>
<bold>classpath:jasperreport/fonts/AlibabaPuHuiTi-2-85-Bold.ttf</bold>
<italic>classpath:jasperreport/fonts/AlibabaPuHuiTi-2-85-Bold.ttf</italic>
<boldItalic>classpath:jasperreport/fonts/AlibabaPuHuiTi-2-85-Bold.ttf</boldItalic>
<pdfEncoding>Identity-H</pdfEncoding>
<pdfEmbedded>true</pdfEmbedded>
<exportFonts>
<export key="net.sf.jasperreports.html">'思源黑体 CN Bold'</export>
</exportFonts>
</fontFamily>
<fontFamily name="思源黑体 CN Medium">
<normal>classpath:jasperreport/fonts/AlibabaPuHuiTi-2-65-Medium.ttf</normal>
<bold>classpath:jasperreport/fonts/AlibabaPuHuiTi-2-65-Medium.ttf</bold>
<italic>classpath:jasperreport/fonts/AlibabaPuHuiTi-2-65-Medium.ttf</italic>
<boldItalic>classpath:jasperreport/fonts/AlibabaPuHuiTi-2-65-Medium.ttf</boldItalic>
<pdfEncoding>Identity-H</pdfEncoding>
<pdfEmbedded>true</pdfEmbedded>
<exportFonts>
<export key="net.sf.jasperreports.html">'思源黑体 CN Medium'</export>
</exportFonts>
</fontFamily>
</fontFamilies>
- 定义全局默认字体
创建jasperreports.properties文件在resources目录下:
#全局使用的默认字体
net.sf.jasperreports.default.font.name=Microsoft YaHei UI
net.sf.jasperreports.default.font.size=12
net.sf.jasperreports.default.pdf.font.name=Microsoft YaHei UI
net.sf.jasperreports.default.pdf.font.size=12
net.sf.jasperreports.default.pdf.encoding=Identity-H
net.sf.jasperreports.default.pdf.embedded=true