You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 15:25:53