我有一个PDF文件,可以在Okular(或任何PDF查看器)中显示字体属性,类似于:
Name: Helvetica
Type: Type1
File: /usr/share/fonts/truetype/liberation2/LiberationSans-regular.ttf
Embedded: No
我希望使用PDFBox 2xx嵌入Helvetica字体,而不需要修改文件内容(文字),以便它始终与文件一起使用。 这是否可能? 我尝试了以下方法:
PDDocument document = PDDocument.load(myFile);
InputStream stream = new FileInputStream(new File("/home/user/fonts_temp/Helvetica.ttf"));
PDFont fontToEmbed = PDType0Font.load(document, stream, true);
PDResources resources = document.getPage(pageNumber).getResources();
resources.add(fontToEmbed);
//or use the font from pdfbox:
resources.add(PDType1Font.HELVETICA);
document.save(somewhere);
document.close();
我也尝试进行调用
COSName fontCosName = resources.add(PDType1Font.HELVETICA);
resources.put(fontCosName, font);
我做错了什么?
编辑:
@TilmanHausherr 谢谢你的提示!但是我还是缺少一些东西。目前我的代码看起来像这样:
PDFont helvetica = PDType0Font.load(document, new FileInputStream(new File("/path/Helvetica.ttf")), false);
...
PDResources resources = page.getResources();
for (COSName fontCosName : resources.getFontNames()){
if(resources.getFont(fontCosName).getName().equals("Helvetica")) {
resources.put(fontCosName, helvetica);
}
}
最终结果显示
Helvetica CID TrueType Fully Embedded
,但该字体现在在PDF文件中根本不显示。我的意思是使用该字体的地方实际上是空白的,空白页......仍然有些东西不对劲。字体本身是从这里下载的。
resources.getFontNames()
进行检查。另外不要进行子集操作,所以最后一个参数应该是false。 - Tilman HausherrPDTrueTypeFont.load(document, file, WinAnsiEncoding.INSTANCE);
- Tilman HausherrSystem.out.println(doc.getPage(0).getResources().getFont(COSName.getPDFName("F1")).getSubType());
- Tilman Hausherr