当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