2012-07-04 63 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'; 
}