在 PDFBox Java 库中找不到 TIMES_ROMAN 字体

问题描述 投票:0回答:1

我正在尝试使用java中的PDFBox将文本写入PDF。但是当我想设置字体时却无法使用。我看了一些教程,和我的代码没有什么区别。怎么了?

这是错误:

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();
    }
}
java fonts pdfbox
1个回答
0
投票

您的问题可能是因为 pdfbox 3 中删除了静态字体实例。

我在尝试遵循 pdfbox 2.0.8 教程时使用 pdfbox 3.0.0 遇到了这个问题。

pdfbox 3 迁移笔记我发现了这个:

标准 14 种字体的 PDType1Font 静态实例已被删除,因为底层 COSDictionary 不应该是不可变的,这导致了几个问题。

引入了 PDType1Font 的新构造函数来创建标准 14 字体。新的 Enum Standard14Fonts.FontName 是唯一的参数,它定义为其创建 PDType1Font 实例的标准 14 字体的名称。该实例不再是单例,必须在必要时重新创建,或者在合适的情况下由用户缓存。

转换为代码,这就是访问字体的方式:

// 2.0.8
PDType1Font.TIMES_ROMAN

// 3.0.0
new PDType1Font(Standard14Fonts.FontName.TIMES_ROMAN)

在代码示例的更广泛上下文中,这会将字体设置为 3.0.0:

contentStream.setFont(new PDType1Font(Standard14Fonts.FontName.TIMES_ROMAN), 12);

并且您需要额外的导入:

import org.apache.pdfbox.pdmodel.font.Standard14Fonts

这让我解决了编译器问题,我能够成功渲染并保存 pdf。

完整的 14 种标准字体名称已全部加载here,下面还有一些其他映射。

另请参阅您的帖子下面有关清理资源的评论。

希望有帮助。免责声明:我对 pdfbox 完全陌生。

© www.soinside.com 2019 - 2024. All rights reserved.