PHP에서 PDF 문서를 미리보기 이미지로 변환하는 방법은 무엇입니까?

| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
그러나 이 게시물에서 우리는 주어진 PDF 문서에서 이미지의 미리보기를 생성하는 훨씬 더 작은 예로 우리 자신을 제한할 것입니다. "왜 미리보기가 필요합니까?`라고 묻습니다. 그의 도서관 관리 시스템, 그녀의 온라인 전자책 서점 또는 미친 주말 프로그래밍 작업에 필요할 수 있습니다. 이 개념을 프로젝트에서 어디에서 사용할 수 있다고 생각합니까? 주석에서 알고 있습니다.더 이상 처음부터 완전한 변환 알고리즘을 구현할 수 없으므로 작업을 더 쉽게 하기 위해 타사 라이브러리를 사용할 것입니다. 이 시나리오에서 내가 매력적으로 발견한 기술은 다음 도구를 기반으로 합니다.
  • Ghostscript:는 PostSript 및 PDF 파일을 해석하는 Windows, Linux 및 Mac의 세 가지 주요 플랫폼 모두에서 사용할 수 있는 명령줄 유틸리티입니다. 자세한 내용은 그의 공식 사이트 .
  • ImageMagick:래스터 이미지와 벡터 이미지 파일을 표시, 변환 및 편집하기 위한 무료 오픈 소스 소프트웨어 패키지입니다. PHP를 포함한 대부분의 주요 프로그래밍 언어 다음은 빠른 개요 에 대한 표준 문서입니다.
U 노래 Ghostscript 프로젝트에서 Ghostscript를 사용하려면 먼저 설치하십시오. Windows를 사용하는 경우 다운로드 페이지에서 실행 파일을 다운로드합니다. Linux 사용자는 기본 패키지 관리자를 통해 Ghostscript를 직접 설치할 수 있습니다.
# RPM 기반 배포판, Fedora 26/27/28 $sudo dnf install ghostscript 
확인 이 명령으로 설치,
$gs --version 
설치 후 PDF 파일이 포함된 디렉토리로 이동하여 다음 명령을 실행합니다.
$gs -dSAFER -dBATCH -sDEVICE = jpeg -dTextAlphaBits = 4 -dGraphicsAlphaBits = 4 -dFirstPage = 1 -dLastPage = 1 -r300 -sOutputFile = preview.jpg input.pdf 문서에서 첫 번째 페이지의 이미지를 만듭니다. 실제로 무엇을 하는지 알아보겠습니다.
  • -sDEVICE:출력 이미지 파일 형식을 설정합니다.
  • -sTEXTVAL, - sGRAPHICVAL: 결과 이미지에 앤티 앨리어싱을 설정합니다. 유효한 값은 1, 2, 4입니다.
  • -r {NUM}:이미지의 해상도(dpi)를 설정합니다.
  • -sFirstPage, -sLastPage:표시할 문서의 첫 번째 페이지와 마지막 페이지를 설정합니다.
  • -sOutputFile:출력 이름을 설정합니다. file.
  • input.pdf:변환에 사용되는 실제 PDF 문서입니다.
이제 PHP에서 이 명령을 사용하기 위해 exec() 함수를 호출합니다. 예:<코드><코드> exec ( "ls -l" , $output_str , $return_val ); foreach ( $output_str as $line ) { echo $line . "" ; }
?>; Linux의 이 예제는 ls를 실행하고 모든 디렉토리와 파일을 콘솔에 인쇄합니다. 이 개념을 이해하고 PHP 코드에서 명령을 실행합니다. 이것이 내가 한 방법입니다.< tbody> 함수 is_pdf ( $file ) { $file_content = file_get_contents ( $file ) ; if (preg_match ( " / ^% PDF- [0-1 ]. [0-9] + / " , $file_content )) { 반환 true; } else { return false; } } 함수 create_preview ( $file ) { $output_format = "jpeg" ; $antialiasing = "4" ; $preview_page = "1" <코드 >; $ resolution = "300" ; $output_file = "preview.jpg" ; < 코드> $exec_command = " gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE = " . $output_format . "" ; $exec_command <코드>. = "- dTextAlphaBits =" . $antialiasing . "-dGraphicsAlphaBits =" . $antialiasing . "" ; $exec_command . = "- dFirstPage =" . $preview_page . "-dLastPage =" . $preview_page . "" ; $exec_command . = "- r" . $ resolution . "" ; $exec_command . = "- sOutputFile =" . $output_file . "` " . $file . "` " ; echo " 명령 실행 중 ... " ; exec ( $exec_command , $command_output , $ return_val ); foreach ( $command_output as $line ) { echo $line . "" ; } if (! $return_val ) { echo "미리보기가 성공적으로 생성되었습니다!!" ; } <코드>기타 <코드 >{ echo "미리보기를 만드는 동안 오류가 발생했습니다." ; } } 함수 __ 메인 __() { 글로벌 $argv ; $input_file = $argv [1]; if (is_pdf( $input_file )) { // PDF 미리보기 만들기 create_preview ( $input_file ); } else { echo "입력 파일" . $input_file . "유효한 PDF 문서가 아닙니다." ; } }
__ 메인 __();
?>
실행 별 명령줄에서 PDF 파일을 허용하는 __main __()과 함께 ts. 입력 파일이 유효한 PDF인지 확인합니다. 유효하면 입력 파일에서 명령을 실행합니다.
종료:
$php pdf_preview.php input.pdf 명령 실행 중... GPL Ghostscript 9.22 (2017-10-04) Copyright (C) 2017 Artifex Software, Inc. All rights reserved. 이 소프트웨어는 무보증으로 제공됩니다. 자세한 내용은 PUBLIC 파일을 참조하십시오. 페이지 1에서 1까지 처리 중입니다. 페이지 1 미리보기가 성공적으로 생성되었습니다!! 
ImageMagick 사용 평소와 같이 시스템에 ImageMagick 바이너리를 설치하는 것으로 시작하겠습니다. 종속성부터 시작하겠습니다.
$sudo dnf install gcc php-devel php-pear 
그런 다음 ImageMagick 설치,
$sudo dnf install ImageMagick ImageMagick-devel 
그런 다음 PHP 래퍼 클래스 설치,
$sudo pecl install imagick $sudo bash -c "echo" extension = imagick.so "> / etc /php.d/imagick.ini "
LAMP 아키텍처에서 사용하려는 경우 Apache 웹 서버를 다시 시작하는 것을 고려하십시오.
$sudo service httpd restart 

이제 시스템이 준비되었으므로 샘플 프로젝트에서 ImageMagick을 사용할 수 있습니다. 스크립트의 기본 기능은 동일하게 유지됩니다. create_preview() 함수의 내용을 다음 코드로 바꾸기만 하면 됩니다.function create_preview ( $file ) { $output_format = "jpeg" ; $preview_page = "1" ; $ resolution = "300" ; $output_file = "imagick_preview.jpg" ; echo " 미리보기 가져오기 ... " ; $img_data = new Imagick(); $img_data -> setResolution ( $ resolution , $ resolution ); $img_data -> readImage( $file . "[" . ( $preview_page - 1). " ] " ); $img_data -> setImageFormat ( $output_format ); file_put_contents ( $output_file , $img_data , FILE_USE_INCLUDE_PATH ); } 코드는 자명합니다. Imagick 유형의 인스턴스를 정의하고 해상도, 파일 형식 등과 같은 다양한 매개변수를 설정합니다. 표시하려는 PDF 페이지를 파일 이름 뒤에 배열 인덱스라고 합니다. 예:

첫 번째 페이지: input.pdf [0] 두 번째 페이지: input.pdf [1]. ... ... N번째 페이지: input.pdf [N - 1] 
출력:
$php pdf_preview.php input.pdf 미리보기 가져오기 ... 여러분 중 일부는 아마도 왜 이전 방법보다 이 방법을 사용하는지 궁금합니다. 글쎄, 나는 ImageMagick이 PHP 코드와 아주 잘 일치한다는 것을 발견했습니다. 프로그래밍의 명령줄은 보기에 좋지 않고 때로는 상식이 됩니다. 그러나 동일한 구성 세트에서 Ghostscript는 ImageMagick에서 생성한 파일보다 더 작은 이미지 파일을 생성했습니다. 이것이 일부 최적화 문제로 인한 것인지 확실하지 않지만 차이는 아닙니다. 하나를 선택하는 것은 단순히 자신의 취향에 따라 달라집니다. 따라서 이것이 주어진 PDF 문서에 대한 미리보기를 만드는 방법입니다. 이 게시물에서 새로운 것을 배웠기를 바랍니다. 어떤 방법을 선호하시나요? 추가 개선을 위한 제안 사항이 있습니까? 의견에 자유롭게 언급하십시오.