JasperReport生成PDF/A类型文档

当JasperReport导出的文档为PDF/A模式时,该PDF为只读可以防止被修改。

  1. 设置导出参数

    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里面。

  1. 定义导出字体

创建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>
  1. 定义全局默认字体

创建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
相关推荐
开开心心就好15 小时前
发票合并打印工具,多页布局设置实时预览
linux·运维·服务器·windows·pdf·harmonyos·1024程序员节
软件工程小施同学17 小时前
区块链论文速读 CCF A--VLDB 2025 (1) 附pdf下载
pdf·区块链
Java面试题总结2 天前
基于 Java 的 PDF 文本水印实现方案(iText7 示例)
java·python·pdf
傻啦嘿哟2 天前
Python操作PDF页面详解:删除指定页的完整方案
开发语言·python·pdf
m5655bj3 天前
使用 C# 修改 PDF 页面尺寸
java·pdf·c#
geovindu3 天前
python: 简单提取PDF文档内文字
开发语言·python·pdf
m0_694845573 天前
HandBrake 是什么?视频转码工具使用与服务器部署教程
服务器·前端·pdf·开源·github·音视频
yivifu4 天前
使用PyMuPdf删除PDF文档中的水印
pdf·pymupdf·去水印
ComPDFKit4 天前
ComPDF的产品升级:从工具包到PDF服务
pdf
占疏4 天前
pdf文件解析
pdf