# дистрибутивы на основе RPM, Fedora 26/27/28 $sudo dnf install ghostscriptVerify установка с помощью этой команды,
$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 {ЧИСЛО}:устанавливает разрешение (в dpi) изображения.
- -sFirstPage, -sLastPage:задает первую и последнюю отображаемую страницу документа.
- -sOutputFile:задает имя вывода файл.
- 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" <код >;
$разрешение
=
"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
как
$line
) {
echo
$line
.
""
;
}
if
(!
$return_val
) {
echo
"Предварительный просмотр успешно создан!!"
;
}
<код>еще <код >{
echo
"Ошибка при создании предварительного просмотра."
;
функция
__ main __() {
global
$argv
;
$input_file
=
$argv
[1];
if
(is_pdf (
$input_file
)) {
// Создать предварительный просмотр PDF
create_preview (
$input_file
);
}
else
{
echo
"Входной файл"
.
$input_file
.
"не является допустимым PDF-документом."
;
}
}
__ main __();
?>
Звезда казни ts с __main __()
, который принимает файл PDF в командной строке. Он проверяет, является ли входной файл допустимым PDF или нет. Если он действителен, он выполняет команду во входном файле.Выход:
$php pdf_preview.php input.pdf Выполнение команды ... GPL Ghostscript 9.22 (2017-10-04) Copyright (C) 2017 Artifex Software, Inc. Все права защищены. Это программное обеспечение поставляется БЕЗ ГАРАНТИЙ: подробности см. в файле 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"
;
$разрешение
=
"300"
;
$output_file
=
"imagick_preview.jpg"
;
echo
" Получение предварительного просмотра ... "
;
$img_data
=
new
Imagick();
$img_data
-> setResolution (
$разрешение
,
$разрешение
);
$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-документа. Надеюсь, вы узнали что-то новое из этого поста. Какой метод вы бы предпочли? Есть предложения по дальнейшим улучшениям? Не стесняйтесь упоминать их в комментариях.