簡體   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