首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PdfBox将字体嵌入到现有文档中

PdfBox将字体嵌入到现有文档中
EN

Stack Overflow用户
提问于 2020-11-09 13:47:17
回答 1查看 2.2K关注 0票数 3

我有一个pdf文件,它在Okular (或任何PDF查看器)中显示字体属性:

代码语言:javascript
复制
Name: Helvetica 
Type: Type1
File: /usr/share/fonts/truetype/liberation2/LiberationSans-regular.ttf
Embedded: No

我希望将Helvetica嵌入到PDFBox 2xx中,而不修改文件内容(文本)本身,这样它就可以始终与文件一起使用。有可能吗?我试过这样的方法:

代码语言:javascript
复制
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();

我也试着打电话给

代码语言:javascript
复制
COSName fontCosName = resources.add(PDType1Font.HELVETICA);
resources.put(fontCosName, font);

我做错了什么?

编辑:

@TilmanHausherr谢谢你的提示!但我还是漏掉了一些东西。目前,我的代码如下所示:

代码语言:javascript
复制
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文件中。我是说那些使用字体的地方都是空的,空白的.但还是没有什么东西。字体本身是从这里下载的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-10 14:43:31

您需要知道资源中当前使用的名称,所以使用resources.getFontNames()检查这些名称

  1. 若要替换标准的14字体,请使用此字体对象:
代码语言:javascript
复制
PDTrueTypeFont.load(document, file, oldFont.getEncoding() /* or WinAnsiEncoding.INSTANCE which is usually right */ );

这确保使用相同的编码作为标准的14字体。( Zapf Dingbat和符号字体不同)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64752894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档