3

PHP Image マジック拡張機能を使用して、複数ページの 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);

何が間違っているのですか? 同じパラメーターを指定したコマンドラインの convert コマンドは機能します。

4

5 に答える 5

3

代わりに次のようなものを試してください。

$images = new Imagick("test.pdf"); 
foreach($images as $i=>$image) {
    $image->setResolution(300,300);
    //etc 
    $image->writeImage("page".$i.".jpg"); 
} 
于 2012-07-07T19:03:52.773 に答える
2

これは、単一ページだけでなく、複数ページの 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';
}
于 2018-01-02T07:23:41.630 に答える
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();
于 2014-04-10T09:45:28.147 に答える