
PDFBox 2.0+ 版本已弃用静态常量(如 PDType1Font.COURIER),需通过 Standard14Fonts 构造器显式创建字体实例,否则编译或运行时将报错或字体失效。
pdfbox 2.0+ 版本已弃用静态常量(如 `pdtype1font.courier`),需通过 `standard14fonts` 构造器显式创建字体实例,否则编译或运行时将报错或字体失效。
在 Apache PDFBox 2.x 及更高版本中,PDType1Font 类不再提供 COURIER、HELVETICA、TIMES_ROMAN 等静态字段。这些字段已在 2.0 版本中被移除,目的是推动更明确的字体加载逻辑与标准化支持。若仍沿用旧写法:
contentStream.setFont(PDType1Font.COURIER, 15); // ❌ 编译失败:找不到符号
将导致编译错误(cannot find symbol),因为 PDType1Font.COURIER 已不存在。
✅ 正确做法是使用 Standard14Fonts.FontName 枚举配合 PDType1Font 构造器:
import org.apache.pdfbox.pdmodel.font.PDType1Font; import org.apache.pdfbox.pdmodel.font.Standard14Fonts; // ✅ 正确:显式构造标准 Type1 字体 contentStream.setFont(new PDType1Font(Standard14Fonts.FontName.COURIER), 15); contentStream.setFont(new PDType1Font(Standard14Fonts.FontName.HELVETICA_BOLD), 12); contentStream.setFont(new PDType1Font(Standard14Fonts.FontName.TIMES_ITALIC), 14);
⚠️ 注意事项:
- Standard14Fonts.FontName 支持全部 14 种 PDF 标准字体(如 COURIER, HELVETICA, TIMES_ROMAN, SYMBOL, ZAPF_DINGBATS 等),但仅限嵌入式可用字体,无需额外文件。
- 不要尝试传入字符串名称(如 "Courier")——PDType1Font(String) 构造器已被弃用且不推荐使用。
- 若需自定义字体(如 .ttf),应改用 PDType0Font.load() 或 PDTrueTypeFont.load(),而非 PDType1Font。
- 确保依赖为 PDFBox 2.0.0+(推荐使用最新稳定版,如 2.0.29 或 3.0.0-RC1),旧版(1.8.x)行为不同,不可混用 API。
总结:迁移至 PDFBox 2.x 后,所有标准 Type1 字体必须通过 new PDType1Font(Standard14Fonts.FontName.XXX) 实例化。这是强制性的 API 演进,既提升类型安全性,也统一了字体初始化流程。开发时建议配合 IDE 的自动导入与枚举补全功能,快速定位可用字体名。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











