我正在尝试使用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();
}
}
您的问题可能是因为 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 完全陌生。