在Ubuntu上使用ImageMagick将PDF转换为JPEG时出现字体不匹配问题?
我正在使用此命令将PDF转换为一组JPEG文件:在Ubuntu上使用ImageMagick将PDF转换为JPEG时出现字体不匹配问题?,ubuntu,pdf,imagemagick,Ubuntu,Pdf,Imagemagick,我正在使用此命令将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
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.
重影脚本版本为:
$ 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
如果您想了解PDF文档使用的字体的所有相关详细信息,请使用
pdffonts the.pdf
如果嵌入字体,您将在emb
列中看到yes
或no
指示
如果字体未嵌入,则会发生如下情况:PDF渲染器在文件中找不到该字体,因此它使用替换字体:
pdffonts
命令具有-subst
参数。所以
pdffonts -subst the.pdf
将报告可能使用的替代字体。由于Poppler库pdffonts
基于使用FreeType作为其字体引擎,因此所报告的替换字体可能对同样使用FreeType的每个查看器都有效
例如,Acrobat不使用FreeType,而是使用自己的字体渲染引擎。所以在AdobeReader中,您可能会得到不同的替换字体
鬼脚本: 命令
gs -h
将报告(除其他事项外)它将使用哪些目录作为搜索字体的路径
您运行的任何Ghostscript命令都可以通过
-sFONTPATH=/path/to/dir:/path/to/other/dir
告诉Ghostscript在当前命令执行期间在其他目录中查找所需字体
ImageMagick:
此命令
convert -list font
将报告ImageMagick在系统上找到的所有字体
更新:(更新问题后) 很明显,PDF中没有嵌入四种不同的
Intro
字体。这是一种非常不常见的字体,当然不在全球PDF使用的前200名中(我应该知道,因为我已经从网络上收集了1000.000 PDF,目前正在创建一个关于其各种属性的统计数据库——我没有一个简介
)
无论是谁创建了PDF,或者是哪个软件创建了PDF,显然对文档处理没有多少线索。因为必须打开、查看或处理该文档的每个其他系统、用户或应用程序都会看到使用这些字体的页面的视图与其创建者看到的非常不同
要将此PDF处理为图像,您不应依赖ImageMagick,而应直接运行Ghostscript:
Intro
字体所在的目录-sFONTPATH=…
参数运行Ghostscript命令让我再次重申:
转换
以使用任何字体将PDF页面呈现为光栅图像convert
无法在随后的光栅数据中插入任何“字体”convert
可以使用的字体仅用于自己的绘图、书写、字幕和注释操作李>
-sFONTPATH=…
参数Intro
font系列在您的系统中的位置。对不起,我不能帮你运行
convert-verbose
将让您了解ImageMagick是如何使用Ghostscript作为PDF输入处理的“委托”的,以及它使用了哪些命令行参数……我这里描述了一个类似的问题,您知道如何解决它吗?哦,是的。那么你的问题的解决方案当然与上面描述的解决方案相似。。。
convert -list font