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

나는 PHPlibGhostScript 래퍼 인 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.