提问人:Corinna 提问时间:10/30/2014 更新时间:11/12/2020 访问量:3170
使用 PDFbox 创建引用 OTF 字体的 PDF
Using PDFbox to create PDF referencing OTF fonts
问:
早上好!
我有一个新手 PDFbox 问题,我希望能得到一些帮助......
我刚刚(上周)从 github 下载了最新的 PDFbox 源代码,并尝试根据 HelloWorldTTF.java 示例创建一个 HelloWorldOTF.java,希望创建一个使用 OTF 字体的 PDF 文件(在本例中为 Adobe Caslon Pro Regular)将文本添加到输出 PDF。
这是我目前所拥有的:
doc = new PDDocument();
PDPage page = new PDPage();
doc.addPage(page);
String testOtfFontFile = "c:/windows/fonts/ACaslonPro-Regular.otf";
String testTtfFontFile = "c:/windows/fonts/arial.ttf";
String testPdfFile = "c:/tmp/pdfboxtest.pdf";
CFFFont font = loadCFFFont(testOtfFontFile);
PDFont ttfFont = PDTrueTypeFont.loadTTF(doc, new File(testTtfFontFile));
PDPageContentStream contentStream = new PDPageContentStream(doc,
page);
contentStream.beginText();
// How to set the CFFFont?
contentStream.setFont(ttfFont, 12);
contentStream.moveTextPositionByAmount(100, 700);
contentStream.drawString(text);
contentStream.endText();
contentStream.close();
doc.save(testPdfFile);
System.out.println(testPdfFile + " created!");
我可以使用以下代码加载 CFFFont:(loadCFFFont()):
CFFFont cff = null;
input = new FileInputStream(file);
byte[] bytes = IOUtils.toByteArray(input);
CFFParser cffParser = new CFFParser();
cff = cffParser.parse(bytes).get(0);
...但我一生都无法弄清楚如何从 CFFFont 到 PDFont,以便能够使用它通过 setFont() 设置字体。
任何帮助或指示将不胜感激......
感谢一百万阅读到此为止;)
答:
2赞
sin_kai
11/12/2020
#1
通过参考此链接,它对我有用。
使用 OTFParser 将 otf 转换为 ttf。
OTFParser otfParser = new OTFParser();
OpenTypeFont otf = otfParser.parse(new File("C:/Users/beder/Downloads/code/CODE Light.otf"));
PDFont font = PDType0Font.load(document, otf, false);
评论
3赞
mkl
11/12/2020
另请阅读 Benjamin Eder 提出该方法后对 PDFBOX-2482 的评论。显然,结果并不完全符合PDF规范。
评论