我有一个包含Type 3字体的PDF文件,如何将这个Type 3字体转换成Type 1字体?
convert
(在imagemagick
中找到)也可以帮助解决问题。正如其他人所说,您可能会丢失一些信息,但在大多数情况下这都可以解决:convert example.pdf example.pdf
你可能无法实现;Type 3字体可以包含任何PostScript;Type 1字体只能包含受限子集。
其他答案建议从源文件重新生成输出Type 1字体而不是Type 3字体。当可行时,这可能是最好的解决方案,但在某些情况下可能不可能(例如,如果源文件或生成程序由于任何原因不可用)。请允许我提供一种替代方法。
如何“转换”Type 3字体
我能够通过在Adobe Acrobat Pro中打开文件,然后将文件打印到Adobe PDF(Adobe Distiller的虚拟打印机之一,属于专业套件),来“转换”PDF图中的Type 3字体。我使用的是Adobe Pro套件版本11(约2012年),但更新版本可能也可以做到同样的事情。这个操作听起来循环,但它实际上给了你一个机会,强制将字体渲染成新的PDF。
在我的版本中,默認的輸出設置足以生成一個與源PDF在視覺上無法區分的PDF,但其中所有的Type 3字體都被直接渲染為向量圖形(即輸出PDF不包含任何字體使用)。Acrobat打印對話框(至少在我的Windows版本中)還有“屬性”和“高級”按鈕,可以進行各種高度詳細的輸出調整。這些包括像嵌入的Type 1字體列表(以及部分嵌入的設置)、輸出兼容性(我使用的是Acrobat 6 / PDF 1.5)、可選的圖像降採樣等。
請注意,此程序可能會導致輸出PDF文件大小顯著增加。在我的情況下,使用Type 3字體的冒犯文本只是一個四分之一頁圖中的幾十個標籤,轉換期間PDF文件大小增加了約2倍;但絕對大小仍然低於50kB,因此擴展對我的目的沒有影響。對於更大的文檔或使用更多Type 3字體的文本,擴展可能更加明顯,因此結果可能會有所不同。
使用以下配置重新生成 matplotlib 绘图:
import matplotlib
matplotlib.rcParams['pdf.fonttype'] = 42
matplotlib.rcParams['ps.fonttype'] = 42
这会输出 TrueType 字体而不是第三种字体类型。Matplotlib 支持三种字体类型。查看此链接以获取更多信息 https://matplotlib.org/stable/users/explain/fonts.html。
特别感谢 Jamie 的博客 http://phyletica.org/matplotlib-fonts/,为我们节省了很多时间。