繁体   English   中英

使用PHP中的ImageMagick将PDF转换为JPG会产生奇数字母间距

[英]Converting a PDF to JPG with ImageMagick in PHP Gives Odd Letter Spacing

我试图通过PHP exec()调用将PDF转换为JPG,如下所示:

convert page.pdf -resize 716x716 page.jpg

出于某种原因,尽管PDF在Acrobat和Mac Preview中看起来很好,但JPG还是出现了文字。 这是原始PDF:

http://whit.info/dev/conversion/page.pdf

这是janktastic输出:

http://whit.info/dev/conversion/page.jpg

服务器是一个带有PHP 5和ImageMagick 6.2.8的LAMP堆栈。

你能帮这个难倒的极客吗?

提前致谢,

惠特

ImageMagick正打算调用Ghostscript将此PDF转换为图像。 如果在pdf上运行gs ,则会得到相同的间隔很大的输出。

我怀疑Ghostscript没有很好地处理PDF的嵌入式TrueType字体。 如果您可以将输出更改为嵌入Type 1字体或使用“核心”PostScript字体,您将获得更好的结果。

我怀疑它是编码/宽度问题。 虽然我无法理解其中的原因,但两者都有点过时了。

以下是一些嫌疑人:

第一

文本流以UTF-16 LE定义。 charNULLcharNULL,使用普通的字符串绘图命令语法:

(some text) Tj

有一种方法可以将任何旧字符值转义为()字符串。 您还可以使用十六进制定义字符串:

<203245> Tj

两种方法都没有使用,只有可疑的内联空值。 如果它试图使用指向char的指针而没有与它们相关的长度,那么这可能会导致GS出现问题。

第二

widths数组是愚蠢的。 您可以这样在组中定义宽度:

[ 32 [450 525 500] 37 [600 250] 40 [0] ]

这定义了
32:450
33:525
34:500
37:600
38:250
40:0

这些字体在各个数组中定义它们的连续宽度。 不是非法的,但绝对浪费/愚蠢,如果GS被编码为EXPECT阵列之间的间隙,它可能会导致错误。

阵列中还有一些非常腥的值。 连续定义了32到126,但随后它开始全部跳跃: ...126 [600] 8364 [500] 8216 [222] 402 [500] 8222 [389]. 8230 [1000] 8224 [444].. ...126 [600] 8364 [500] 8216 [222] 402 [500] 8222 [389]. 8230 [1000] 8224 [444].. 然后从160到255连续返回。

太奇怪了。

第三

我甚至不确定,但CIDToGIDMap流包含大量的空值。

底线

那些字体很可疑。 我从来没有听说过“贝尔弗劳尔书”或“UFPDF 0.1”

这个版本号让我感到畏缩。 它应该会让你感到畏缩。

谷歌搜索“UFPDF”我发现作者的这个说明:

注意:我写的是UFPDF作为实验,而不是成品。 如果您在使用它时遇到问题,请不要错过我的支持。 虽然补丁很受欢迎,但我没有太多时间来维护它。

UFPDF是一个位于FPDF之上的PHP库。 0.1。 逃跑吧。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM