2012-07-04 233 views
2

我想通過使用PHP圖像魔術擴展將多頁PDF文件轉換爲圖像。問題在於,不是獲取圖像對應於每個頁面的文件,而是獲取最後一頁pdf作爲輸出圖像。這裏是代碼:將多頁PDF轉換爲多圖像

$handle = fopen($imagePath, "w"); 
$img1 = new Imagick(); 

$img1->setResolution(300,300); 
$img1->readImage(path to pdf file); 
$img1->setColorspace(imagick::IMGTYPE_GRAYSCALE); 
$img1->setCompression(Imagick::COMPRESSION_JPEG); 
$img1->setCompressionQuality(80); 
$img1->setImageFormat("jpg"); 

$img1->writeImageFile($handle); 

我在做什麼錯?使用相同參數的命令行轉換命令工作。

+0

嘗試這樣的代替:$ images = new Imagick(「test.pdf」); foreach($ images as $ i => $ image){ $ image-> writeImage(「page」。$ i。「。jpg」); } –

+0

@Martin Wilson:你應該將你的評論升級到正確的答案...... –

回答

2

嘗試這樣代替:

$images = new Imagick("test.pdf"); 
foreach($images as $i=>$image) { 
    $image->setResolution(300,300); 
    //etc 
    $image->writeImage("page".$i.".jpg"); 
} 
+0

這對我不起作用,我得到'無法處理空Imagick對象'異常。 – Ray

+0

這種循環的工作正常,但它可能需要很長時間超過100頁的文件和服務器膠底 –

2

嘗試writeImages功能。它將每個頁面創建爲一個圖像,併爲多個圖像提供文件名,如下所示:yourimagename,yourimagename-1,yourimagename-2 ....它會自動從0增加到numberofpagesinPdf-1。

的代碼看起來是這樣的:

+0

這對我來說很好,約每秒10頁 –

1

嘗試是這樣的,如果你知道你的PDF頁數:

$images = new Imagick(); 

foreach ($pages as $p){ 

    $im->readImage($PdfFile."[".$p."]"); //yourfile.pdf[0], yourfile.pdf[1], ... 

    $im->setCompression(Imagick::COMPRESSION_JPEG); 
    $im->setCompressionQuality(82); 
    $im->setImageFormat("jpg"); 
    //... 
    $image_out = "image_".$p.".jpg"; 
    $im->writeImage($image_out); 
} 

$im->clear(); 
$im->destroy(); 

如果你不知道的頁數,你可以做些什麼像這樣:

$images = new Imagick(); 
$im->readImage($PdfFile); 
$pages = (int)$im->getNumberImages(); 
0

這個工作對我來說

$file = "./path/to/file/name.pdf"; 
$fileOpened = @fopen($archivo, 'rb'); 
$images = new Imagick(); 
$images->readImageFile($fileOpened); 
foreach ($images as $i => $image) { 
    $image->setResolution(300, 300); 
    $image->setImageFormat("jpg"); 
    $image->setImageCompression(imagick::COMPRESSION_JPEG); 
    $image->setImageCompressionQuality(90); 
    $image->setImageUnits(imagick::RESOLUTION_PIXELSPERINCH); 
    $data_blob = $image->getImageBlob(); 
    $ouput="./path/images/files/page" . $i . ".jpg"; 
    file_put_contents($ouput, $data_blob); 
} 
@fclose($fileOpened); 

我希望我可以幫助你太

0

這將爲具有多頁和單頁的PDF工作。

$pdf_file = 'path/to/pdf/file.php'; 
$image = new imagick(); 
$image->setResolution(300,300); 
$image->readImage($pdf); 
$image->setImageFormat('jpg'); 

// Set all other properties 

$pages = $image->getNumberImages(); 

if ($pages) { 
    foreach($image as $index => $pdf_image) { 
     $pdf_image->writeImage('destination/path/' . $index . '-image_file.jpg'); 
    } 
} else { 
    echo 'PDF doesn\'t have any pages'; 
}