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

使用PDFBox Java库时TIMES_ROMAN字体找不到的问题排查

PDFBox中TIMES_ROMAN字体找不到的问题解决

我尝试使用Java的PDFBox库向PDF中写入文本,但设置字体时发现TIMES_ROMAN不可用。我的代码和教程中的写法一致,请问问题出在哪里?

报错信息

java: cannot find symbol
  symbol:   variable TIMES_ROMAN
  location: class org.apache.pdfbox.pdmodel.font.PDType1Font

相关代码

import org.apache.pdfbox.*;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDDocumentInformation;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import java.io.IOException;

public class app {
    public static void main(String[] args) throws IOException {
        PDDocument document = new PDDocument();
        for(int x=0;x<10;x++){
            PDPage myPage = new PDPage();
            document.addPage(myPage);
        }

        PDPage page = document.getPage(1);
        PDPageContentStream contentStream = new PDPageContentStream(document,page);
        contentStream.beginText();
        contentStream.setFont(PDType1Font.TIMES_ROMAN, 12);

        document.save("C:/Users/ASUS/Desktop/testPDFBOX.pdf");
        document.close();
    }
}

问题原因及解决方法

问题出在PDFBox的版本差异上:

  • 如果你用的是PDFBox 3.x及以上版本:这个版本重构了PDType1Font的字体常量命名,原TIMES_ROMAN被更名为TIMES_ROMAN_REGULAR,同时新增了TIMES_ROMAN_BOLD、TIMES_ROMAN_ITALIC等细分常量。只需要把代码里的字体常量替换即可:
    contentStream.setFont(PDType1Font.TIMES_ROMAN_REGULAR, 12);
    
  • 如果你想保留教程里TIMES_ROMAN的写法:直接降级PDFBox到2.x稳定版本(比如2.0.29),这个版本里PDType1Font.TIMES_ROMAN是原生支持的。

额外提示

你的代码还有个小问题:调用beginText()后没有设置文本的起始位置,就算字体问题解决了,文本也不会显示出来。可以在setFont之后补充以下代码:

contentStream.newLineAtOffset(50, 700); // 设置文本在页面的(50,700)位置
contentStream.showText("测试文本"); // 写入具体内容
contentStream.endText(); // 结束文本绘制
contentStream.close(); // 关闭内容流

否则可能出现PDF无法正常显示或损坏的情况。


内容的提问来源于stack exchange,提问作者Chingu Dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 03:31:15