- Ghostscript:는 PostSript 및 PDF 파일을 해석하는 Windows, Linux 및 Mac의 세 가지 주요 플랫폼 모두에서 사용할 수 있는 명령줄 유틸리티입니다. 자세한 내용은 그의 공식 사이트 .
- ImageMagick:래스터 이미지와 벡터 이미지 파일을 표시, 변환 및 편집하기 위한 무료 오픈 소스 소프트웨어 패키지입니다. PHP를 포함한 대부분의 주요 프로그래밍 언어 다음은 빠른 개요 에 대한 표준 문서입니다.
# 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 문서입니다.
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 문서에 대한 미리보기를 만드는 방법입니다. 이 게시물에서 새로운 것을 배웠기를 바랍니다. 어떤 방법을 선호하시나요? 추가 개선을 위한 제안 사항이 있습니까? 의견에 자유롭게 언급하십시오.