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
相关推荐
故事与九1 天前
vue3使用vue-pdf-embed实现前端PDF在线预览
前端·vue.js·pdf
亦世凡华、1 天前
React--》实现 PDF 文件的预览操作
经验分享·pdf·react·pdf预览
William.csj2 天前
VSCode——插件分享:Markdown PDF
vscode·pdf·markdown
切糕师学AI2 天前
Spire.XLS for .NET 中, 将 Excel 转换为 PDF 时, 如何设置纸张大小为A4纸,并将excel内容分页放置?
pdf·.net·excel·spire
CodeCraft Studio3 天前
国产化PDF处理控件Spire.PDF教程:Java 提取 PDF 图片,高质量提取与图片过滤技巧
java·python·pdf·国产化·文档处理·spire·pdf图片提取
名字越长技术越强3 天前
浏览器pdf、image显示
pdf
cpp_learners3 天前
QT Word模板 + QuaZIP + LibreOffice,跨平台方案实现导出.docx文件后再转为.pdf文件
qt·pdf·docx
清岚_lxn3 天前
前端js通过a标签直接预览pdf文件,弹出下载页面问题
前端·javascript·pdf
liliangcsdn3 天前
借助于llm将pdf转化为md文本
pdf
大山运维4 天前
好用的在线PDF转图片工具,支持100MB文件
pdf