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

如何使用一些库将pdf中的斜体字体转换为普通字体?,pdf,fonts,imagemagick,ghostscript,Pdf,Fonts,Imagemagick,Ghostscript,是否有任何方法可以使用Imagemagick或GhostScript等库将pdf中的斜体、粗体字体转换为普通字体?基本上答案是“否”,尽管其中有几个级别的警告 PDF文件最常见的情况是,它包含一个嵌入式字体,并且该字体是一个子集。在这种情况下,字体将使用自定义编码,因此当您在显示器上看到“Hello”时,实际字符代码可能是“Axtte”或类似的乱码如果字体还包含一个ToUnicode表,从技术上讲,您可以从与粗体或斜体相同的系列中创建一个常规字体的嵌入子集,并将其嵌入,这将起作用。这将是一项巨大

是否有任何方法可以使用Imagemagick或GhostScript等库将pdf中的斜体、粗体字体转换为普通字体?

基本上答案是“否”,尽管其中有几个级别的警告

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

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

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

请注意,由于PDF是一种二进制格式,索引(xref)包含文件中每个对象的偏移量,因此任何更改都意味着必须重建xref表,这同样是一项艰巨的任务

我不知道有什么工具可以自动为您完成这些,您必须自己编写,尽管有些事情可以自动完成。例如,MuPDF将为您“修复”包含错误外部参照表的PDF文件

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


因此,从根本上说,答案是否定的。

答案基本上是否定的,尽管有几个级别的警告

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

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

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

请注意,由于PDF是一种二进制格式,索引(xref)包含文件中每个对象的偏移量,因此任何更改都意味着必须重建xref表,这同样是一项艰巨的任务

我不知道有什么工具可以自动为您完成这些,您必须自己编写,尽管有些事情可以自动完成。例如,MuPDF将为您“修复”包含错误外部参照表的PDF文件

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


因此,从根本上说,没有。

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

至于斜体,大多数字体都包含一个表示其斜体角度的度量,您可以使用该度量,使用剪切CTM变换矩阵和
cm
操作添加一个假斜体。再次强调,添加斜体剪切可能更有效,但也可能成功地删除斜体剪切


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

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

至于斜体,大多数字体都包含一个表示其斜体角度的度量,您可以使用该度量,使用剪切CTM变换矩阵和
cm
操作添加一个假斜体。再次强调,添加斜体剪切可能更有效,但也可能成功地删除斜体剪切

这将需要一个具有较低级别PDF构建的库,您必须手动完成,但从技术上讲是可能的