如何使用某些库将斜体字体转换为pdf中的普通字体?

时间:2016-06-21 05:56:52

标签: pdf fonts imagemagick ghostscript

有没有什么方法可以使用像Imagemagick或GhostScript等库来将我的pdf中的Italic字体,Bold字体转换为普通字体?

2 个答案:

答案 0 :(得分:2)

基本上答案是“没有”#39;虽然有几个级别的警告。

PDF文件最常见的情况是它包含嵌入字体,而该字体是子集。在这种情况下,字体将使用自定义编码,以便当您看到“Hello”#39;在您的显示器上,实际的字符代码可能是' Axtte'或类似的胡言乱语。 如果该字体还包含一个ToUnicode表,从技术上讲,您可以从与粗体或斜体相同的族中创建常规字体的嵌入子集并嵌入它,并且它可以工作。这将是一项巨大的工作。

如果字体不是子集,那么它可能不包含自定义编码,这会使该任务更容易,因为您不必重新编码替换。

如果字体未嵌入,则只需更改Font对象中的字体名称,因为PDF使用者无论如何都必须找到替代字体。

请注意,因为PDF是二进制格式,索引(xref)包含文件中每个对象的偏移量,所以任何更改都意味着必须重建外部参照表,这也是一项相当大的任务。

我不知道有任何工具会自动为您做这些事情,您必须自己编写,但有些事情可以自动完成。例如,MuPDF将修​​复' PDF文件,其中包含不正确的外部参照表。

即便如此,与普通字体相比,斜体或粗体字体的间距可能会有所不同,如果用常规字体替换它们,看起来会很奇怪。

所以,从根本上说,没有。

答案 1 :(得分:0)

在低级PDF中,您可以在文本流前面应用一些渲染标记。类似于“渲染模式” Tr操作。例如,在这种情况下,您可以使用命令序列0.4 w 2 Tr包括文本轮廓的渲染和增加轮廓图的宽度,这将导致普通文本变得更加“粗体”(还有其他更好的方法可以使用字体描述字典)。但是,也可以采用这种策略,使用剪裁的较粗轮廓缩小粗体文本,但这可能并不理想。

对于斜体,大多数字体都包含表示斜体角度的度量,您可以使用cm操作使用剪切CTM转换矩阵使用此度量添加假斜体。再次,这可能会更好地添加斜剪,但也可能在去除斜剪方面取得了一些成功。

请参见PDF Reference

这将需要一个具有较低级别PDF构建的库,您必须手动进行操作,但是从技术上讲是可行的。