java 去掉pdf字体_PDF / iText:替换字体defs

我正在使用iText(Java lib)来处理已经创建的PDF文件 .

我想要实现的是用该PDF基本字体替换与PDF基本字体公制兼容的字体 . 这将使PDF更“合规”,也可能更小 .

这是怎么回事:

循环播放PDF中使用的字体 .

如果字体与PDF基本字体的度量标准兼容,则用该字体替换字体名称(但保留PDF资源名称,例如 /F13 ,这样我们就不需要触摸任何文本对象) . 由于iText在其jar中嵌入了PDF基本字体的AFM文件,我假设iText实际上有足够的知识来进行此评估 . 我可能不得不看看serif / sans-serif和monotype标志以及我是否应该交换Helvetica,Times或Courier .

此外,如果度量兼容:删除该字体的任何字体嵌入 . (因为我们've replaced with a PDF base font there'不需要嵌入任何东西..大小很重要!)

一个例子:

现有的PDF文件使用“Calibri”,“Arial”和“Times” . 以下是每种方法的处理方法 .

Calibri . 此字体在PDF基本字体中没有与度量兼容的表兄弟,因此将跳过对此字体资源的处理 .

Arial . 此字体在PDF基本字体中具有与度量兼容的表兄,即"Helvetica" . 字体资源的名称(我认为属性 BaseFont )将更改为"Helvetica",并且将删除任何可能的嵌入 .

次 . 此字体已是PDF基本字体 . 跳过处理 . (我们可以考虑在这里解开,如果有什么东西要解开,但我已经知道如何做到这一点,所以不是问题的一部分)

我基本上陷入了确定度量兼容性的步骤 . 任何帮助是极大的赞赏 .

(注意:基于iText 5.x的答案是完全可以的,因为我觉得最近的iText 7仍然有些无证)

更新

正如所指出的那样,为了安全更换,还需要进行一些检查:

字体编码兼容性 . 对我来说不是一个问题,因为我将要处理的文档中的字体将使用WinAnsiEncoding .

字体中可用的字符 . 这对我来说不是一个问题,因为我可以轻松获取有关该字体文档中使用哪些字符的知识 .

我相信我可以找出来检查这两个条件 . (我很天真)

我不是想做一个通用的工具 . 我知道我将处理PDF的来源 . 在任何情况下,我想如果无法确定替换是“安全的”,可以从PDF中获取足够的信息来跳过字体替换 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值