使用PHP中的ImageMagick将PDF转换为JPG会产生奇数字母间距
我正在尝试使用PHP使用PHP中的ImageMagick将PDF转换为JPG会产生奇数字母间距,php,pdf,imagemagick,exec,jpeg,Php,Pdf,Imagemagick,Exec,Jpeg,我正在尝试使用PHPexec()调用将PDF转换为JPG,如下所示: convert page.pdf -resize 716x716 page.jpg 出于某种原因,尽管PDF在Acrobat和Mac预览版中看起来还不错,但JPG还是发布了janky文本。以下是原始PDF: 这是janktastic的输出: 服务器是一个包含PHP5和ImageMagick 6.2.8的LAMP堆栈 你能帮助这个被难倒的极客吗 提前感谢, WhitImageMagick将调用Ghostscript将此PD
exec()
调用将PDF转换为JPG,如下所示:
convert page.pdf -resize 716x716 page.jpg
出于某种原因,尽管PDF在Acrobat和Mac预览版中看起来还不错,但JPG还是发布了janky文本。以下是原始PDF:
这是janktastic的输出:
服务器是一个包含PHP5和ImageMagick 6.2.8的LAMP堆栈
你能帮助这个被难倒的极客吗
提前感谢,
WhitImageMagick将调用Ghostscript将此PDF转换为图像。如果在pdf上运行
gs
,则会得到相同的间隔不正确的输出
我怀疑Ghostscript不能很好地处理PDF中嵌入的TrueType字体。如果您可以将输出更改为嵌入Type 1字体或使用“core”PostScript字体,您将获得更好的结果。我怀疑这是编码/宽度问题。两者都有点不对劲,尽管我不知道为什么 以下是一些嫌疑犯: 首先 文本流在UTF-16 LE中定义。CHARNULCHARNULL,使用普通字符串绘图命令语法:
(一些文本)Tj
有一种方法可以将任何旧字符值转义为()字符串。也可以用十六进制定义字符串:
Tj
这两种方法都不使用,只使用有问题的内联空值。如果GS试图使用指向char的指针而不使用与它们相关联的长度,那么这可能会在GS中引起问题
秒
宽度数组是哑的。您可以在组中定义宽度,因此:
[32[450 525 500]37[600 250]40[0]
这定义了32:450
33:525
34:500
37:600
38:250
40:0 这些字体在单个数组中定义其连续宽度。这不是非法的,但绝对是浪费/愚蠢的,如果将GS编码为期望阵列之间存在间隙,则可能会引发错误 数组中还有一些非常可疑的值。32到126是连续定义的,但随后它开始到处跳跃:
…126[600]8364[500]8216[222]402[500]8222[389]。8230[1000]8224[444]…
。然后回到从160到255的连续状态
真奇怪
第三
我甚至一点也不确定,但CIDToGIDMap流包含大量空值
底线
那些字体很可疑。我从来没有听说过“钟花图书”或“UFPDF 0.1”
那个版本号让我很害怕。这也会让你畏缩
在谷歌搜索“UFPDF”时,我从作者那里找到了这张便条:
注意:我写UFPDF是作为一个实验,而不是作为一个成品。如果您在使用它时遇到问题,请不要打扰我寻求支持。虽然补丁是受欢迎的,但我没有太多时间来维护它。
UFPDF是一个PHP库,位于FPDF之上。0.1. 快跑。imagemagick使用的是什么版本的GS?如何定位GS版本?我可以在phpinfo文件中找到ImageMagick,但不能在GS中找到。ImageMagick使用GS渲染PDF。一旦配置了IM,PHP就不会直接接触它。如果您正在运行windows,则可以在“程序文件”文件夹中找到它。你应该有一个“gs”文件夹。在那将是一个“gs#.###”文件夹。那些是版本号。如果它已经在您的路径中,您可以在命令行中键入“gswin32c”(或者unixy的人可以键入gs)。我正在Rackspace的灯堆上运行它。然后您可能可以通过在命令行上运行
gs-v
来获取版本。(我看到了与gs 8.71相同的问题)。不幸的是,这些是设计师提供的字体。它们是Adobe字体,除了这些转换后的图像外,在任何地方都能很好地显示出来。