首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PHP中使用ImageMagick将PDF转换为JPG会产生奇数的字母间距。

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

Stack Overflow用户
提问于 2011-03-11 12:21:16
回答 2查看 1.4K关注 0票数 4

我正在尝试使用PHP exec()调用将PDF转换为JPG,如下所示:

代码语言:javascript
复制
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

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

你能帮助这个被难住的极客吗?

提前谢谢你,

白色

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-11 12:35:49

ImageMagick只需调用Ghostscript将此PDF转换为图像。如果你在pdf上运行gs,你会得到同样的错误间隔的输出。

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

票数 4
EN

Stack Overflow用户

发布于 2011-03-12 09:40:06

我怀疑这是编码/宽度问题。这两个都有点差,尽管我不知道为什么。

以下是一些疑点:

First

文本流在UTF-16 LE中定义。charNULLcharNULL,使用正常的字符串绘制命令语法:

(some text) Tj

有一种方法可以将任何旧字符值转义为()字符串。你也可以这样定义十六进制的字符串:

<203245> Tj

这两种方法都没有使用,只有可疑的内联空值。这可能会在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的连续。

就是很奇怪。

Third

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

底线

这些字体很可疑。我从来没听说过“钟花图书”或"UFPDF 0.1“

那个版本号让我很难堪。这应该也会让你退缩。

在谷歌上搜索"UFPDF“,我发现了作者的这句话:

注释:我写UFPDF是一个实验,而不是一个成品。如果您在使用它时遇到问题,请不要纠缠我以获得支持。虽然补丁是受欢迎的,但我没有太多的时间来维护它。

UFPDF是一个建立在FPDF之上的PHP库。0.1。快跑吧。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5268909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档