- Ghostscript:é um utilitário de linha de comando disponível para todas as três principais plataformas, como Windows, Linux e Mac, que interpretam arquivos PostSript e PDF. Você pode ler mais sobre isso em seu site oficial .
- ImageMagick:Este é um pacote de software gratuito e de código aberto para exibir, converter e editar imagens raster e arquivos de imagem vetorial. Está disponível para a maioria das principais linguagens de programação ‚Äã‚Äãincluindo PHP. Aqui está a documentação padrão para visão geral rápida .
# distribuições baseadas em RPM, Fedora 26/27/28 $sudo dnf install ghostscriptVerificar a instalação com este comando,
$gs --versionApós a instalação, navegue até o diretório que contém o arquivo PDF e execute o seguinte comando.
$gs -dSAFER -dBATCH -sDEVICE = jpeg -dTextAlphaBits = 4 -dGraphicsAlphaBits = 4 -dFirstPage = 1 -dLastPage = 1 -r300 -sOutputFile = preview.jpg input.pdf Isso criará uma imagem da primeira página do documento. Vamos entender o que ele realmente faz;
- -sDEVICE:define o formato do arquivo de imagem de saída.
- -sTEXTVAL, - sGRAPHICVAL: define o anti-aliasing para a imagem resultante. Os valores válidos ‚Äã‚Äãsão 1, 2 e 4.
- -r {NUM}:define a resolução (em dpi) da imagem.
- -sFirstPage, -sLastPage:configura a primeira e a última página do documento a ser exibida.
- -sOutputFile:configura o nome da saída arquivo.
- input.pdf:este é o documento PDF real que é usado para converter.
exec()
. Por exemplo:
exec
(
"ls -l"
,
$output_str
,
$return_val
);
foreach
(
$output_str
as
$line
) {
echo
$line
.
""
;
}
?>;
Este exemplo no Linux executará ls
e imprimirá todos os diretórios e arquivos no console. Podemos usar este conceito e execute um comando do nosso código PHP. Foi assim que eu fiz;< tbody>
função
is_pdf (
$file
) {
$file_content
=
file_get_contents
(
$file
) ;
if
(preg_match (
" / ^% PDF- [0-1 ]. [0-9] + / "
,
$file_content
)) {
return
true;
}
else
{
return
false;
}
}
função
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
" Executando comando ... "
;
exec
(
$exec_command
,
$command_output
,
$ return_val
);
foreach
(
$command_output
as
$line
) {
echo
$line
.
""
;
}
if
(!
$return_val
) {
echo
"Visualização criada com sucesso !!"
;
}
outro
{
echo
"Erro ao criar a visualização."
;
}
}
função
__ main __() {
global
$argv
;
$input_file
=
$argv
[1];
if
(is_pdf (
$input_file
)) {
// Criar visualização de PDF
create_preview (
$input_file
);
}
else
{
echo
"O arquivo de entrada"
.
$input_file
.
"não é um documento PDF válido."
;
}
}
__ main __();
?>
Estrela de execução ts com __main __()
que aceita um arquivo PDF na linha de comando. Verifica se o arquivo de entrada é um PDF válido ou não. Se válido, ele executa o comando no arquivo de entrada.
Sair: $php pdf_preview.php input.pdf Excuting command ... GPL Ghostscript 9.22 (2017-10-04) Copyright (C) 2017 Artifex Software, Inc. Todos os direitos reservados. Este software não possui GARANTIA: consulte o arquivo PUBLIC para detalhes. Processando as páginas 1 a 1. Página 1 Visualização criada com sucesso !!
Usando o ImageMagick Como de costume, vamos começar instalando os binários do ImageMagick no sistema. Vamos começar com as dependências; $sudo dnf install gcc php-devel php-pear
Em seguida, instale o ImageMagick;$sudo dnf install ImageMagick ImageMagick-devel
Em seguida, instale as classes PHP wrapper;$sudo pecl install imagick $sudo bash -c "echo" extension = imagick.so "> / etc /php.d/imagick.ini "
Se você planeja usá-lo na arquitetura LAMP, considere reiniciar o servidor web Apache;$sudo service httpd restart
Agora que nosso sistema está pronto, podemos usar o ImageMagick em nosso projeto de amostra. A funcionalidade básica do script permanece a mesma. Tudo o que você precisa fazer é substituir o conteúdo da função create_preview()
pelo código a seguir.function
create_preview (
$file
) {
$output_format
=
"jpeg"
;
$preview_page
=
"1"
;
$resolution
=
"300"
;
$output_file
=
"imagick_preview.jpg"
;
echo
" Buscando visualização ... "
;
$img_data
=
new
Imagick();
$img_data
-> setResolution (
< código>$resolução
,
$resolução
);
$img_data
-> readImage (
$file .
"["
. (
$preview_page
- 1).
" ] "
);
$img_data
-> setImageFormat (
$output_format
);
file_put_contents
(
$output_file
,
$img_data
, FILE_USE_INCLUDE_PATH );
}
O código é autoexplicativo. Definimos uma instância do tipo Imagick
e definimos vários parâmetros como resolução, formato de arquivo, etc. A página PDF que você deseja exibir é chamada de índice de matriz após o nome do arquivo. Por exemplo:Primeira página: input.pdf [0] Segunda página: input.pdf [1]. ... ... Enésima página: input.pdf [N - 1]
Saída: $php pdf_preview.php input.pdf Buscando visualização ... Alguns de vocês podem estar se perguntando por que usar este método sobre o anterior. Bem, eu achei o ImageMagick para combinar muito bem com o código PHP. A linha de comando na programação não parece muito boa e às vezes se torna de conhecimento comum. No entanto, com o mesmo conjunto de configurações, o Ghostscript produziu arquivos de imagem menores do que os arquivos produzidos pelo ImageMagick. Não tenho certeza se isso se deve a alguns problemas de otimização, mas essa não é a diferença. Escolher um sobre o outro é simplesmente baseado em seu próprio gosto. Então é assim que você cria uma visualização para um determinado documento PDF. Espero que você tenha aprendido algo novo com este post. Qual método você prefere? Alguma sugestão para outras melhorias? Sinta-se à vontade para mencioná-los nos comentários.