gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 06:57:58 57 4
gpt4 key购买 nike

我有一个 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 完全嵌入但是字体现在根本不显示在 PDF 文件中。我的意思是那些使用字体的地方实际上是空的,空白页......仍然没有东西。字体本身是从 here 下载的

最佳答案

您需要知道资源中当前使用的名称,因此请使用 resources.getFontNames()

检查这些名称

2。要替换标准 14 号字体,请使用此字体对象:

PDTrueTypeFont.load(document, file, oldFont.getEncoding() /* or WinAnsiEncoding.INSTANCE which is usually right */ );

这确保使用与标准 14 字体相同的编码。 (Zapf Dingbats 和 Symbol 字体不同)

关于java - PdfBox 将字体嵌入到现有文档中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64752894/

57 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com