Ant*_*ong 3 pdf ubuntu imagemagick
我正在使用此命令将 PDF 转换为一组 JPEG 文件:
convert -strip -quality 100 -alpha off \
-density 165% -scene 1 tmp3GtW_h.pdf /tmp/a1.jpg
Run Code Online (Sandbox Code Playgroud)
这是原始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.
Run Code Online (Sandbox Code Playgroud)
转换版本为:
$ 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
Run Code Online (Sandbox Code Playgroud)
Ghostscript 版本是:
$ gs --version
9.10
Run Code Online (Sandbox Code Playgroud)
我的问题是
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
Run Code Online (Sandbox Code Playgroud)
如果您想了解 PDF 文档所用字体的所有相关详细信息,请使用
pdffonts the.pdf
Run Code Online (Sandbox Code Playgroud)
您将在emb
标有yes
或的列中看到no
是否嵌入了字体。
如果字体不是嵌入的,当你看到这样的事情会发生:在PDF渲染器没有找到文件中的字体,所以它使用替代字体:
但是文档在不同的查看者和不同的系统之间看起来很可能不同。因为每个查看器使用不同的算法来替换丢失的字体。
该pdffonts
命令的-subst
参数。所以
pdffonts -subst the.pdf
Run Code Online (Sandbox Code Playgroud)
会报告,有什么替代字体可能被可能被使用。由于 Poppler 库pdffonts
基于使用 FreeType 作为其字体引擎,因此报告的替换字体可能对每个也使用 FreeType 的查看器有效。
例如,Acrobat不使用 FreeType,而是使用它自己的字体渲染引擎。因此,在 Adobe Reader 中,您可能会获得不同的替换字体。
幽灵脚本:
命令
gs -h
Run Code Online (Sandbox Code Playgroud)
将报告(除其他外)它将用作搜索字体的路径的目录。
您运行的任何 Ghostscript 命令都可以通过
-sFONTPATH=/path/to/dir:/path/to/other/dir
Run Code Online (Sandbox Code Playgroud)
告诉 Ghostscript 在当前命令的持续时间内在其他目录中查找所需的字体。
图像魔法:
这个命令
convert -list font
Run Code Online (Sandbox Code Playgroud)
将报告 ImageMagick 在系统上找到的所有字体。
很明显,Intro
PDF 中没有嵌入四种不同的字体。这是一种非常不常见的字体,当然不在 PDF 中全球使用的前 200 种字体中(我应该知道,因为我已经从网上收集了 1.000.000 个 PDF,并且目前正在创建一个关于它们各种属性的统计数据库——我不知道)Intro
那里没有一个...)。
无论是谁创建了该 PDF,或者无论使用哪种软件,显然都对文档处理一无所知。因为必须打开、查看或处理该文档的每个其他系统、用户或应用程序将看到使用这些字体的那些页面的视图与其创建者所看到的完全不同。
为了将此 PDF 处理为图像,您不应依赖 ImageMagick,而应直接运行 Ghostscript:
Intro
字体所在的目录。-sFONTPATH=...
参数运行 Ghostscript 命令。让我再次重申:
convert
使用任何字体将 PDF 页面渲染为光栅图像。convert
无法在后续的光栅数据中插入任何“字体”。convert
可以使用的字体仅用于其自身的绘图、书写、字幕和注释操作。-sFONTPATH=...
参数。Intro
字体系列在系统上的哪个位置。我不能为你这样做,对不起。运行convert -verbose
将让您深入了解 ImageMagick 如何准确地使用 Ghostscript 作为其“委托”进行 PDF 输入处理,以及它使用哪些命令行参数......
归档时间: |
|
查看次数: |
2316 次 |
最近记录: |