我正在使用此命令将PDF转换为一组JPEG文件:
convert -strip -quality 100 -alpha off \
-density 165% -scene 1 tmp3GtW_h.pdf /tmp/a1.jpg
以下是原始PDF:
字体更薄,更类似于Helvetica。
结果如下:
输出JPEG文件中的字体不同且更粗。
convert
命令显示此警告:
**** Warning: An error occurred while reading an XREF table.
**** The file has been damaged. This may have been caused
**** by a problem while converting or transfering the file.
**** Ghostscript will attempt to recover the data.
**** This file had errors that were repaired or ignored.
**** The file was produced by:
**** >>>> Microsoft? PowerPoint? 2013 <<<<
**** Please notify the author of the software that produced this
**** file that it does not conform to Adobe's published PDF
**** specification.
转换版本为:
$ convert --version
Version: ImageMagick 6.8.9-7 Q16 x86_64 2014-12-30 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2014 ImageMagick Studio LLC
Features: DPC OpenMP
Delegates: jng jpeg png x xml zlib
Ghostscript版本是:
$ gs --version
9.10
我的问题是
1)我该如何解决这个问题?
2)如何判断PDF文件使用的是什么字体?
3)如何判断convert
和gs
可以使用哪些字体?
编辑:找到问题2的答案。以下是pdffonts
命令的结果:
name type encoding emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
Intro Black Italic Type 1 WinAnsi no no no 145 0
Intro Regular Type 1 WinAnsi no no no 147 0
Intro Black Inline Caps Type 1 WinAnsi no no no 388 0
ABCDEE+Segoe UI TrueType WinAnsi yes yes no 2233 0
ABCDEE+Segoe UI,Italic CID TrueType Identity-H yes yes yes 2607 0
ABCDEE+Segoe UI,Italic TrueType WinAnsi yes yes no 2612 0
Intro Bold Italic Type 1 WinAnsi no no no 3781 0
答案 0 :(得分:3)
如果您想了解有关PDF文档使用的字体的所有相关详细信息,请使用
pdffonts the.pdf
如果嵌入了字体,您会在emb
或yes
所示的列no
中看到。
如果嵌入了 NOT 字体,则会发生这样的事情:PDF渲染器在文件中找不到字体,因此它使用替换字体:
但是,从观看者到观看者以及从系统到系统,文档很可能看起来不同。因为每个查看器使用不同的算法来替换丢失的字体。
pdffonts
命令具有-subst
参数。所以
pdffonts -subst the.pdf
将报告可能使用的替换字体 。由于Poppler,库pdffonts
基于使用FreeType作为其字体引擎,因此报告的替换字体可能对每个也使用FreeType的查看器都有效。
Acrobat例如 NOT 使用FreeType,但它自己的字体渲染引擎。因此,在Adobe Reader中,您可能会获得不同的替换字体。
<强>的Ghostscript:强>
命令
gs -h
将报告(除其他事项外)将用作搜索字体的路径的目录。
您运行的任何Ghostscript命令都可以通过
进行修改-sFONTPATH=/path/to/dir:/path/to/other/dir
告诉Ghostscript在当前命令的持续时间内在其他目录中查找所需的字体。
<强> ImageMagick的:强>
此命令
convert -list font
将报告ImageMagick在系统中找到的所有字体。
非常清楚地说,PDF中没有嵌入四种不同的Intro
字体。这是一种非常罕见的字体,当然不会出现在全球使用的前200个PDF中(我应该知道,因为我从网上收集了1.000.000个PDF,目前正在创建一个关于各种属性的统计数据库 - 我不知道那里有一个Intro
......)。
无论是谁创建了这个PDF,或者哪个软件都这样做了,显然对文档处理没有多少线索。因为必须打开,查看或处理该文档的每个其他系统或用户或应用程序将使用这些字体从其创建者看到的那些字体中看到非常不同的视图。
为了将此PDF处理成图像,您不应该依赖ImageMagick,而是直接运行Ghostscript:
Intro
字体的目录。-sFONTPATH=...
参数运行Ghostscript命令,如上所述。让我重复一遍:
convert
使用任何字体将PDF页面渲染为光栅图像。convert
无法在后果中将任何“字体”插入栅格数据。convert
可以使用的字体仅用于其自己的绘图,书写,字幕和注释操作。 -sFONTPATH=...
参数。Intro
字体系列的位置。抱歉,我不能帮你那样做。运行convert -verbose
可以让您深入了解ImageMagick如何将Ghostscript用作PDF输入处理的'委托',以及它使用的命令行参数....