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
相关推荐
罗政7 小时前
PDF 批量合并工具:本地 AI 自动排序、识别正文日期与合同编号
数据库·pdf·php
Metaphor69211 小时前
使用 Python 添加、隐藏和删除 PDF 图层
python·pdf·图层
SEO-狼术14 小时前
Navigate PDF Documents with Page Thumbnails
pdf
SEO-狼术2 天前
Organize PDF Navigation with Bookmarks
pdf
qetfw2 天前
初中数学教材PDF合集|人教北师大华师大等10个版本
pdf
绘梨衣5473 天前
求助帖:pdf复杂表格解析
爬虫·python·pdf
大飞记Python3 天前
Linux命令速查手册(测试开发4年实战总结,附PDF)
linux·网络·pdf
2501_930707783 天前
如何在不损失质量的情况下将 PDF 转换为 SVG
pdf
eybk3 天前
写一个可以编制pdf文件的python程序
开发语言·python·pdf
YFJ_mily3 天前
**Python 实战:写一个论文 PDF 投稿自检工具|附 IPAT 2026 智能光子学会议征稿信息
人工智能·python·pdf·量子计算·论文投稿·智能光子学