web-dev-qa-db-ja.com

PHPでPDFドキュメントをプレビューイメージに変換するにはどうすればよいですか?

PDFドキュメントの一部を画像ファイルにレンダリングするには、どのライブラリ、拡張機能などが必要ですか?

私が見つけたほとんどのPHP PDFライブラリはPDFドキュメントの作成を中心にしていますが、Webでの使用に適した画像形式にドキュメントをレンダリングする簡単な方法があります?

私たちの環境はLAMPスタックです。

185
Mathew Byrne

ImageMagick および GhostScript が必要です

<?php
$im = new imagick('file.pdf[0]');
$im->setImageFormat('jpg');
header('Content-Type: image/jpeg');
echo $im;
?>

[0]page 1を意味します。

215

何らかの理由でImageMagickをお持ちでない場合、Gd関数もGhostScriptと連携して動作します。 exec()を使用してghostscriptコマンドを実行してPDFをJPGに変換し、結果のファイルをimagecreatefromjpeg()で操作します。

Ghostscriptコマンドを実行します。

exec('gs -dSAFER -dBATCH -sDEVICE=jpeg -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -r300 -sOutputFile=whatever.jpg input.pdf')

操作するには、新しいプレースホルダーイメージ$newimage = imagecreatetruecolor(...)を作成し、現在のイメージを取り込みます。 $image = imagecreatefromjpeg('whatever.jpg')、その後、imagecopyresampled()を使用してサイズを変更したり、他の任意の数の非imagemagickコマンドを組み込みます

31
Andrew

を使用してページ数を取得することもできます

$im->getNumberImages();

次に、ループを使用して、すべてのページのサムを作成できます。

'file.pdf['.$x.']'
30
Jason

PHP拡張機能 Imagick を使用します。ラスター出力画像の目的のサイズを制御するには、 setResolution function を使用します

<?php    
$im = new Imagick();
$im->setResolution(300, 300);     //set the resolution of the resulting jpg
$im->readImage('file.pdf[0]');    //[0] for the first page
$im->setImageFormat('jpg');
header('Content-Type: image/jpeg');
echo $im;
?>

(Paolo Bergantino氏の回答とLuis Melgratti氏のコメント。画像を読み込む前に解像度を設定する必要があります。)

14
Sebastian

BLOBからPDFをロードする場合、これは最後のページではなく最初のページを取得する方法です。

$im->readimageblob($blob);
$im->setiteratorindex(0);
11
jrjohnson

Imagemagickに付属している「変換」ユーティリティを実行してみることもできます。

exec("convert pdf_doc.pdf image.jpg");
echo 'image-0.jpg';
8
Preet Sandhu

私は PDFlib の作成者です。これは GhostScript phpのラッパーです。このライブラリを使用する利点は、既にテストされており、ImageMagicを必要としません

Pdfに関しては、GhostScriptコマンドは常にImageMagicよりも高速なので、GhostScriptラッパーまたは純粋なGhostScriptコマンドを使用する必要があります。

$pdflib = new ImalH\PDFLib\PDFLib();
$pdflib->setPdfPath($pdf_file_path);
$pdflib->setOutputPath($folder_path_for_images);
$pdflib->convert();

インストール完了!うまくいきました!

Windowsでbase install imagemagick を実行できます。

php (local)exec(<command line>)の呼び出しを使用しますex:

<?php
$pdf = "filename.pdf";
$info = pathinfo($pdf);
$file_name =  basename($pdf,'.'.$info['extension']);
echo $file_name;
$pdf = "filename.pdf[0]";
exec("convert $pdf convert-img/$file_name.jpg");    
?>

さらに、 PHP Imagickクラスclass imagickを使用することもできます

すべてが助けてくれました!

3
Duy Khanh

別の考え方で、次のライブラリを使用して、javascriptを使用してpdfを画像に変換できます。

http://usefulangle.com/post/24/pdf-to-jpeg-png-with-pdfjs

1
jewelhuq

これは、いくつかのプロジェクトで作成して使用した簡単なクラスです。 imagickをラップするだけで、各ページのディスクへの書き込みを処理します。誰かがまだこれを行う簡単な方法を探しているなら、 this link が役に立つかもしれません。

1
user664995