PHPでPDFドキュメントをプレビュー画像に変換するにはどうすればよいですか?[閉まっている]


199

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

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

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


私はこれを行うことができて、ファイルに.jpg拡張子を付けたいです。.htaccess AddHandlerメソッドを試しましたが、機能しませんでした。
Keyslinger、2016年

回答:


228

あなたが必要ImageMagickとし、GhostScript

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

[0]手段page 1


11
はい、動作します。$ im-> setResolution(300、300)などを使用して、PDFを希望の解像度でレンダリングすることもできます。
Luis Melgratti 2009年

6
私は試していませんが、Googleドキュメントを使用していて、iFrameを気にしない場合、この提案は機能する可能性があります(これはwpプラグインでもあります)forrst.com/posts/PDF_thumbnails_with_Google_Docs-6G6
David

4
しかし、ImageMagickとGhostScriptを
PHP

1
@ think123 use $im->thumbnailImage(1500, 0);これは、jpg画像を幅1500に設定し、縮尺を保持します。ドキュメントを参照
Kevin Jantzer、2014年

1
以下の私の答えから-blobからPDFをロードしている場合、これは最後のページではなく最初のページを取得する方法です。$ im-> readimageblob($ blob); $ im-> setiteratorindex(0);
jrjohnson 2014

34

何らかの理由でImageMagickを使用していない場合は、GD関数もGhostScriptと連携して機能します。でghostscriptコマンドを実行してexec()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コマンドをいくつでも変更できます


3
最初のページの画像を取得するには、コマンドにスイッチ-dFirstPage = 1 -dLastPage = 1を追加します。
Tim Dearborn

それでも機能しない場合は、gsバイナリへのフルパスを指定する必要があるかもしれません。
craned

これは、システムコマンドを実行しているようです。ユーザーがという名前のファイルをアップロードするとどうなりますsomething;rm -rf /か?
iProgram

PDFのすべてのページを画像に変換する場合。その後、どうすればいいですか?
Dhara

31

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

$im->getNumberImages();

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

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

34
(これは実際にはパオロベルガンティーノの回答に対するコメントです)
サイモンイースト

スマートな答え。他からは与えられませんでしたが、あなたは気づき、書きました。
Ashu Kumar

16

php拡張モジュールImagickを使用します。ラスター出力画像の必要なサイズを制御するには、setResolution関数を使用します。

<?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の彼のコメントの拡張。画像をロードする前に解像度を設定する必要があります。)


11

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

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

10
(これは実際にはパオロベルガンティーノの回答に対するコメントです)
Simon East

9

imagemagickに付属の 'convert'ユーティリティを実行してみることもできます。

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

3
pdf_doc.pdfの代わりに、pdf_doc.pdf [0]が推奨されます。
John Kurlak、2012

convertはImageMagickパッケージの一部です。sudo yum install ImageMagick
Jack Millerを

それでも機能しない場合は、convertバイナリへのフルパスを提供する必要があるかもしれません。
craned

1
echo 'image-0.jpg';文字列を返します。
suz

私のために働いた、ありがとう
イザベラ

4

私はの作者だのPDFlibのGhostscript PHPのラッパー、このライブラリを使用する利点は、それがすでにテストされ、それは必要ありません。ImageMagic

GhostScriptコマンドは常にImageMagicPDFの場合よりも高速であるため、GhostScriptラッパーまたは純粋なGhostScriptコマンドを使用する必要があります。

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

こんにちは、私はPDFlibを使用してPDFからPNGを作成しています。$ pdflib = new ImalH \ PDFLib \ PDFLib(); $ pdflib-> setPdfPath($ pdf_file_path); $ pdflib-> setOutputPath($ folder_path_for_images); $ pdflib-> setImageFormat(\ ImalH \ PDFLib \ PDFLib :: $ IMAGE_FORMAT_PNG); $ pdflib-> setDPI(100); $ pdflib-> setPageRange(1、$ pdflib-> getNumberOfPages()); $ pdflib-> convert(); PDFlibには、作成されたPNGファイルの幅と高さを設定するオプションがありますか?
WGS 2018年

こんにちは、どのPDFLibにも画像を操作するメソッドはありませんが、このようにできます。あなたはPDFLibを使わPNG画像を生成した後、次のような別の画像操作libraray使用することができます github.com/Treinetic/ImageArtistを ...あなたの仕事を成し遂げるために
imal hasarangaペレラ

私が提案した上記の方法を試してくださいが、それでも問題が解決しない場合は、imal @ treinetic.comにメールを送ってください。サンプルコードでお手伝いします...乾杯!!
imal hasaranga perera

やってみます。提案をありがとう。
WGS 2018年

3

インストール済み!うまくいきました!

あなたはwindowsにimagemagickをベースインストールするかもしれません。

php (local)使用コールexec(<command line>) 例:

<?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されるかもしれません

おかげでみんな助けてくれました!


2

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

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


サーバーでプレビュー画像を表示したい場合、どうすれば使用できますか?
チトラ

あなたはこのを見てみたいことがあります。github.com/scandel/pdfThumbnailsを。ここで生成された画像のサムネイルを実際のファイルと一緒にアップロードして保存できると思います。これにより、サーバーでの計算時間を節約できます(サムネイル処理はクライアント側のコンピューターで行われたため)。
sajed zarrinpour '10 / 09/19

1

これは、私がいくつかのプロジェクトで作成して使用した単純なクラスです。ラップしてimagick、各ページのディスクへの書き込みを処理します。これを行う簡単な方法をまだ探している人がいる場合は、このリンクが役に立ちます。


2
StackOverflowでは、リンクのみの回答は価値が低く、リンクが移動または停止した場合、回答はまったく役に立たなくなります。答えを改善するには、ソリューションの大部分をここにハードコーディングする必要があります。
mickmackusa
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.