从PDFBox 3.0.0-RC1迁移至3.0.0时如何设置字体?
PDFBox 3.0.0 升级后字体设置问题解决
问题描述
在PDFBox 3.0.0.RC1中可正常运行的代码,升级到3.0.0正式版后,原字体设置语句失效:
contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12);
尝试直接实例化PDFont时,触发错误:PDFont is abstract; cannot be instantiated
contentStream.setFont(new PDFont(Standard14Fonts.FontName.HELVETICA_BOLD), 12);
原RC1版本完整工作代码:
try (var document = new PDDocument();) { var page = new PDPage(); document.addPage(page); try (var contentStream = new PDPageContentStream(document, page);) { contentStream.beginText(); contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12); contentStream.newLineAtOffset(100, 700); contentStream.showText("Hello World"); contentStream.endText(); } document.save(path.toFile()); }
解决方案
PDFBox 3.0.0正式版调整了字体加载API,PDType1Font的静态字体常量已被移除,需通过PDType1Font.load()方法加载标准字体,并关联当前文档实例。
修改后的字体设置代码:
var font = PDType1Font.load(document, Standard14Fonts.FontName.HELVETICA_BOLD); contentStream.setFont(font, 12);
完整可运行代码:
try (var document = new PDDocument();) { var page = new PDPage(); document.addPage(page); try (var contentStream = new PDPageContentStream(document, page);) { contentStream.beginText(); // 加载并设置Helvetica Bold字体 var font = PDType1Font.load(document, Standard14Fonts.FontName.HELVETICA_BOLD); contentStream.setFont(font, 12); contentStream.newLineAtOffset(100, 700); contentStream.showText("Hello World"); contentStream.endText(); } document.save(path.toFile()); }
原因说明
- PDFBox 3.0.0正式版废弃了
PDType1Font类中的静态字体常量(如HELVETICA_BOLD),改为显式通过load方法加载字体资源。 PDFont是抽象类,无法直接实例化,必须使用其具体实现类(如PDType1Font)的实例来设置字体。
内容的提问来源于stack exchange,提问作者Tugalsan Karabacak
相关产品推荐
相关产品推荐

