[英]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.