PHP에서 PDF 문서를 미리보기 이미지로 어떻게 변환합니까? [닫은]


199

PDF 문서의 일부를 이미지 파일로 렌더링하려면 어떤 라이브러리, 확장자 등이 필요합니까?

내가 찾은 대부분의 PHP PDF 라이브러리는 PDF 문서 작성을 중심으로하지만 웹 사용에 적합한 이미지 형식으로 문서를 렌더링하는 간단한 방법이 있습니까?

우리 환경은 LAMP 스택입니다.


이 작업을 수행하고 파일 .jpg확장자를 갖기를 원합니다 . .htaccess AddHandler 메서드를 시도했지만 작동하지 않았습니다.
— Keyslinger

답변:


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

6
나는 그것을 시도하지만 구글 문서 도구를 사용하는, 그리고 iframe이이 제안 힘 작업 (그것도 WP 플러그인입니다) 괜찮다면하지 않은 forrst.com/posts/PDF_thumbnails_with_Google_Docs-6G6
— 데이비드 호브

4
하지만 PHP 파일에 ImageMagick과 GhostScript를 포함시키는 방법
— namratha

1
@ think123 use $im->thumbnailImage(1500, 0);jpg 이미지를 너비 1500으로 설정하고 배율을 유지합니다. 문서를 참조하십시오
— Kevin Jantzer

1
내 대답에서 아래-BLOB에서 PDF를로드하는 경우 마지막 페이지 대신 첫 페이지를 얻는 방법입니다. $ im-> readimageblob ($ blob); $ im-> setiteratorindex (0);
— jrjohnson

34

어떤 이유로 든 ImageMagick이없는 사람들은 GhostScript와 함께 GD 기능도 작동합니다. ghostscript 명령을 실행하여 exec()PDF를 JPG로 변환 하고을 사용하여 결과 파일을 조작하십시오 imagecreatefromjpeg().

고스트 스크립트 명령을 실행하십시오.

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바이너리 의 전체 경로를 제공해야 할 수도 있습니다 .
— 들어올 려져

시스템 명령을 실행중인 것 같습니다. 사용자가 파일을 업로드하면 something;rm -rf /어떻게됩니까?
— iProgram

pdf의 모든 페이지를 이미지로 변환하려면. 그럼 어떻게해야합니까?
— Dhara

31

당신은 또한 사용하여 페이지 수를 얻을 수 있습니다

$im->getNumberImages();

그런 다음 루프를 사용하여 모든 페이지의 엄지 손가락을 만들 수 있습니다.

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

34
(실제로 Paolo Bergantino의 답변에 대한 의견이어야합니다)
— Simon East

똑똑한 답변. 다른 사람이 아니라 당신이 주목하고 썼습니다.
— 아슈 쿠마르

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
(실제로 Paolo Bergantino의 답변에 대한 의견이어야합니다)
— 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

convert는 ImageMagick 패키지의 일부입니다. 시도 sum yum 설치 ImageMagick
— 잭 밀러

여전히 작동하지 않으면 convert바이너리 의 전체 경로를 제공해야 할 수도 있습니다 .
— 크레인

1
echo 'image-0.jpg';문자열을 반환합니다.
— suz December

고맙습니다
— Isabella

4

나는 PHPlib 의 GhostScript 래퍼 인 PDFlib 의 저자입니다. 이 라이브러리를 사용하는 이점은 이미 테스트되었으며 필요하지 않습니다.ImageMagic

항상 PDF에 GhostScript비해 명령이 더 빠르 ImageMagic므로 GhostScript 래퍼 또는 순수한 GhostScript 명령을 사용해야합니다.

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

안녕하세요, PDFlib를 사용하여 PDF에서 PNG를 만듭니다. $ pdflib = 새로운 ImalH \ PDFLib \ PDFLib (); $ pdflib-> setPdfPath ($ pdf_file_path); $ pdflib-> setOutputPath ($ 폴더 _ 경로 _for_images); $ pdflib-> setImageFormat (\ ImalH \ PDFLib \ PDFLib :: $ IMAGE_FORMAT_PNG); $ pdflib-> setDPI (100); $ pdflib-> setPageRange (1, $ pdflib-> getNumberOfPages ()); $ pdflib-> convert (); PDFlib에는 생성 된 PNG 파일의 너비와 높이를 설정하는 옵션이 있습니까?
— WGS

안녕하세요, PDFLib은 이미지를 조작하는 방법을 제공하지 않지만 이렇게 할 수 있습니다. PDFLib를 사용하여 png 를 생성하면 github.com/Treinetic/ImageArtist 와 같은 다른 이미지 조작 라이브러리 를 사용하여 작업을 완료 할 수 있습니다.
— imal hasaranga perera

위의 방법을 시도해보십시오. 그러나 여전히 어려움을 겪고 있다면 imal@treinetic.com으로 메일을 보내 주시면 샘플 코드로 도와 드리겠습니다 ... 건배!
— imal hasaranga perera 12

시도해 볼게요. 제안 해 주셔서 감사합니다.
— WGS

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


서버에 미리보기 이미지를 표시하려면 어떻게 사용합니까?
— chithra 2019

github.com/scandel/pdfThumbnails를 살펴 보십시오 . 여기에 생성 된 이미지 축소판을 실제 파일과 함께 업로드하고 저장할 수 있다고 생각합니다.이 방법으로 축소판 프로세스가 클라이언트 측 컴퓨터에서 수행되었으므로 서버에서 더 많은 계산 시간을 절약 할 수 있습니다.
— sajed zarrinpour

1

다음은 몇 가지 프로젝트에서 작성하고 사용한 간단한 클래스입니다. imagick각 페이지를 디스크에 쓰는 것만 랩핑 하고 처리합니다. 누구든지 여전히 쉬운 방법을 찾고 있다면 이 링크 가 도움 이 될 수 있습니다.


2
링크 단독 응답은 링크가 이동하거나 죽으면 응답이 전혀 쓸모 없게되기 때문에 StackOverflow에서 값이 낮습니다. 귀하의 답변을 향상시키기 위해 대부분의 솔루션을 여기에 하드 코딩해야합니다.
— mickmackusa 2013
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.