2014-04-15 80 views
0

我在使用PHP中的Imagick將PDF文件轉換爲JPEG時遇到了一些麻煩。 經過大量的研究,我能夠將CMYK pdf轉換爲RGB jpg而無需奇怪的顏色轉換......但現在,我的最後一個問題是:文本完全是別名!原始PDF文件中的文本不是矢量化的。PHP Imagick PDF轉換文本別名

一個例子:
Aliased text with pdf conversion

下面是代碼:

$imagick = new Imagick(); 

$imagick->setResolution(150,150); 
$imagick->readImage('file.pdf'); 

//CMYK PROFILE 
$icc = file_get_contents('USWebCoatedSWOP.icc'); 
$imagick->profileImage('icc', $icc); 
$imagick->setImageColorspace(imagick::COLORSPACE_CMYK); 

//RGB PROFILE 
$icc = file_get_contents('sRGB_IEC61966-2-1_no_black_scaling.icc'); 
$imagick->profileImage('icc', $icc); 
$imagick->setImageColorspace(imagick::COLORSPACE_RGB); 

$imagick->setImageFormat("jpg"); 
$imagick->setImageCompression(imagick::COMPRESSION_JPEG); 
$imagick->setImageCompressionQuality(90); 

header("Content-Type: image/jpeg"); 
echo $imagick; 
+0

你能發表一個例子pdf嗎? – Danack

+0

[示例pdf](http://lacentralepharma.com/flyer.pdf)! –

+0

謝謝。有什麼似乎是一個重複的問題,在這裏的答案 - http://stackoverflow.com/a/16435640/778719但接受的答案是不適合我,但也許我做錯了什麼。 – Danack

回答

1

難懂的使用Ghostscript的實際呈現的PDF文件,我認爲你正在使用一個版本的Ghostscript有a bug in it中,導致文本不被反鋸齒正確。

我測試了您提供的代碼,以及使用該命令直接調用Ghostscript。

gs -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=1 -sDEVICE=pngalpha -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -r150 -sOutputFile=foo-%d.png flyer.pdf 

默認情況下,我的Centos盒使用的Ghostscript版本8.70這表明你遇到的問題,無論是從Imagick從GS調用時,上面的命令。在使用命令行時,從here下載版本9.14使得文本在使用命令行時可以正確消除鋸齒,並且可能會在通過Imagick調用時進行。

+0

我想你明白了!我試圖更新我的服務器上的ghostscript,但百勝更新,沒有包標記爲更新...我會在今天晚些時候進一步調查! –

+1

您可以從該服務器下載該文件並從目錄運行該文件,而無需安裝更新後的版本進行測試。 – Danack

0

這最有可能是沒有抗鋸齒問題。

將分辨率提高到400,看看會發生什麼。

$imagick->setResolution(400,400); 
+0

這絕對是一個別名問題...即使分辨率更高,文本的外觀總是相同的...我張貼的屏幕截圖不會縮放,像素顯示完全像這樣! –

+0

試試這個嗎? http://php.net/manual/en/imagick.setcompressionquality.php,第一條評論說根據php版本使用不同的命令。也許你的不工作? – Toly

+0

我99%確定它不是解決問題或壓縮問題。通過放大文本,絕對沒有jpeg文物。如果我提高分辨率,它會變得更好,但1)它太重了,2)它仍然是別名。這是一個別名問題,但似乎谷歌不是我的朋友在這個問題上!我發現有更多的選擇使用imagemagick與命令行和dTextAlphaBits聽起來像這樣的問題的選項...無法找到類似的功能使用PHP。 –