我有一个pdf文件,它在Okular (或任何PDF查看器)中显示字体属性:
Name: Helvetica
Type: Type1
File: /usr/share/fonts/truetype/liberation2/LiberationSans-regular.ttf
Embedded: No我希望将Helvetica嵌入到PDFBox 2xx中,而不修改文件内容(文本)本身,这样它就可以始终与文件一起使用。有可能吗?我试过这样的方法:
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文件中。我是说那些使用字体的地方都是空的,空白的.但还是没有什么东西。字体本身是从这里下载的。
发布于 2020-11-10 14:43:31
您需要知道资源中当前使用的名称,所以使用resources.getFontNames()检查这些名称
PDTrueTypeFont.load(document, file, oldFont.getEncoding() /* or WinAnsiEncoding.INSTANCE which is usually right */ );这确保使用相同的编码作为标准的14字体。( Zapf Dingbat和符号字体不同)
https://stackoverflow.com/questions/64752894
复制相似问题