1. 为什么需要PDF与OFD的互转能力?
在企业级文档处理场景中,PDF和OFD是两种最常见的电子文档格式。PDF作为国际通用标准,具有广泛的兼容性和成熟的生态支持;而OFD(Open Fixed-layout Document)是我国自主制定的版式文档国家标准(GB/T 33190-2016),在政务、金融、税务等领域具有法定效力。
实际开发中经常遇到这样的需求:业务系统生成的PDF需要转换为OFD用于电子发票/公文归档,或者需要将OFD文档转换为PDF以便更广泛的分发。更复杂的是,根据《电子签名法》要求,电子文档常需进行数字签名,而SM2是我国商用密码体系推荐的椭圆曲线公钥密码算法。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术选型:为什么选择ofdrw?
在Java生态中,处理OFD的开源库相对稀缺。经过对比测试,ofdrw(全称Open Fixed-layout Document Reader & Writer)是目前功能最完善的OFD处理库,具有以下优势:
- 完整支持OFD国家标准GB/T 33190-2016
- 提供PDF与OFD双向转换能力
- 集成SM2数字签名功能
- 纯Java实现,与SpringBoot无缝集成
- 活跃的社区维护(GitHub star数超过1.2k)
注意:商业项目中使用前请确认ofdrw的LICENSE(Apache 2.0)是否符合您的合规要求。
3. 环境准备与基础配置
3.1 依赖引入
在SpringBoot项目的pom.xml中添加以下依赖:
xml复制<dependency>
<groupId>org.ofdrw</groupId>
<artifactId>ofdrw-full</artifactId>
<version>2.1.5</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.70</version>
</dependency>
关键依赖说明:
- ofdrw-full:包含OFD读写、PDF转换等全套功能
- bcprov-jdk15on:BouncyCastle提供的密码学支持,用于SM2签名
3.2 证书准备
SM2签名需要以下文件:
- 签名证书(.cer或.pem格式)
- 私钥文件(通常为.pk8或.key格式)
- 证书链(如有)
建议将这些文件放在resources/certs目录下,并通过@Value注入:
java复制@Value("classpath:certs/sm2.cer")
private Resource certResource;
@Value("classpath:certs/sm2.key")
private Resource privateKeyResource;
4. 核心功能实现
4.1 PDF转OFD实战
java复制public void convertPdfToOfd(InputStream pdfInput, OutputStream ofdOutput) {
try {
// 1. 创建转换器
PDFConverter converter = new PDFConverter(pdfInput);
// 2. 设置输出配置
converter.convert(ofdOutput);
} catch (IOException e) {
throw new RuntimeException("PDF转换OFD失败", e);
}
}
关键参数说明:
- pdfInput:PDF文件输入流,支持从文件、网络或数据库读取
- ofdOutput:OFD输出流,可写入文件或直接返回
