Home  >  Article  >  Backend Development  >  Convert PDF document to preview image in PHP

Convert PDF document to preview image in PHP

WBOY
WBOYforward
2024-02-28 11:34:191178browse

php editor Apple will introduce you how to convert PDF documents into preview images in PHP. When a PDF document is displayed on a web page, it usually needs to be converted into an image format to provide a preview function. Through PHP code, we can use third-party libraries to convert PDF to images, making it easier for users to preview PDF documents online. This article will introduce the specific code implementation steps, allowing you to easily implement the preview function of PDF documents.

Previews add a layer of security to your content because content on images cannot be copied and pasted. They also offer other features that we won't go into detail.

The easiest way to convert a PDF document into a preview image is to utilize a third-party library. all these are:

  1. Ghostscript
  2. ImageMagick

Convert PDF document to preview image using php and Ghostscript

This command line utility is available on windows, linux, and Mac. Follow the steps below to convert PDF documents to preview images.

  1. To start the installation, visit Ghostscript’s official website, download the executable file, and follow the installation instructions.
  2. Run the code below to verify the installation.
    <code>
    <code class="language-bash hljs"><span class="hljs-variable">$gs</span> --vers<strong class="keylink">io</strong>n
    </code></code>
  3. In your PDF file directory, run the following command. ```bash $gs -dSAFER -dBATCH -sDEVICE=jpeg \

-dTextAlphaBits=4 -dGraphicsAlphaBits=4
-dFirstPage=1 -dLastPage=1 -r300
-sOutputFile=preview.jpg input.pdf

<code>
<code class="hljs language-php"><span class="hljs-number">4</span>. 上面的命令将在您的文档上创建起始页的图像。 我们将调用 `exec()` 函数来使用 PHP 中的命令,如下所示。
```php
<span class="hljs-meta"><?php</span>
exec( <span class="hljs-string">"ls -l"</span>, <span class="hljs-variable">$output_str</span>, <span class="hljs-variable">$return_val</span> );
<span class="hljs-keyword">foreach</span> ( <span class="hljs-variable">$output_str</span> <span class="hljs-keyword">as</span> <span class="hljs-variable">$line</span> ) {
<span class="hljs-keyword">echo</span> <span class="hljs-variable">$line</span> . <span class="hljs-string">"\n"</span>;
}
<span class="hljs-meta">?></span>
</code></code>

The above code will load all directories and files into the console. We can now use PHP code to execute Ghostscript commands.

This is the PHP script we use.

<code>
<code class="language-php hljs"><span class="hljs-meta"><?php</span>

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">my_pdf</span> (<span class="hljs-params"> <span class="hljs-variable">$file</span> </span>) </span>{
<span class="hljs-variable">$file_info</span> = file_get_contents( <span class="hljs-variable">$file</span> );

<span class="hljs-keyword">if</span> ( preg_match( <span class="hljs-string">"/^%PDF-[0-1]\.[0-9]+/"</span>, <span class="hljs-variable">$file_info</span> ) ) {
<span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
}
<span class="hljs-keyword">else</span> {
<span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
}
}
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">our_preview</span> (<span class="hljs-params"> <span class="hljs-variable">$file</span> </span>) </span>{
<span class="hljs-variable">$our_f<strong class="keylink">ORM</strong>at</span> = <span class="hljs-string">"png"</span>;
<span class="hljs-variable">$prvw_page</span> = <span class="hljs-string">"1"</span>;
<span class="hljs-variable">$resolution</span> = <span class="hljs-string">"300"</span>;
<span class="hljs-variable">$our_file</span> = <span class="hljs-string">"prvw.jpg"</span>;

<span class="hljs-variable">$command</span>= <span class="hljs-string">"gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE="</span> . <span class="hljs-variable">$our_format</span> . <span class="hljs-string">" "</span>;
<span class="hljs-variable">$command</span> .= <span class="hljs-string">"-dTextAlphaBits="</span> . <span class="hljs-string">" -dGraphicsAlphaBits="</span> . . <span class="hljs-string">" "</span>;
<span class="hljs-variable">$command</span> .= <span class="hljs-string">"-dFirstPage="</span> . <span class="hljs-variable">$prvw_page</span> . <span class="hljs-string">" -dLastPage="</span> . <span class="hljs-variable">$prvw_page</span> . <span class="hljs-string">" "</span>;
<span class="hljs-variable">$command</span> .= <span class="hljs-string">"-r"</span> . <span class="hljs-variable">$resolution</span> . <span class="hljs-string">" "</span>;
<span class="hljs-variable">$command</span> .= <span class="hljs-string">"-sOutputFile="</span> . <span class="hljs-variable">$our_file</span> . <span class="hljs-string">" &#39;"</span> . <span class="hljs-variable">$file</span> . <span class="hljs-string">"&#39;"</span>;
<span class="hljs-keyword">echo</span> <span class="hljs-string">"Running command...\n"</span>;
exec( <span class="hljs-variable">$command</span>, <span class="hljs-variable">$com_output</span>, <span class="hljs-variable">$ret_val</span> );
<span class="hljs-keyword">foreach</span>( <span class="hljs-variable">$com_output</span> <span class="hljs-keyword">as</span> <span class="hljs-variable">$line</span> ) {
<span class="hljs-keyword">echo</span> <span class="hljs-variable">$line</span> . <span class="hljs-string">"\n"</span>;
}
<span class="hljs-keyword">if</span> ( !<span class="hljs-variable">$ret_val</span> ) {
<span class="hljs-keyword">echo</span> <span class="hljs-string">"Preview created !!\n"</span>;
}
<span class="hljs-keyword">else</span> {
<span class="hljs-keyword">echo</span> <span class="hljs-string">"Error while creating.\n"</span>;
}
}
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">__m<strong class="keylink">ai</strong>n__</span>() </span>{
<span class="hljs-keyword">global</span> <span class="hljs-variable">$arg</span>;
<span class="hljs-variable">$inp_file</span> = <span class="hljs-variable">$arg</span>[<span class="hljs-number">1</span>];

<span class="hljs-keyword">if</span> ( my_pdf( <span class="hljs-variable">$inp_file</span> ) ) {
<span class="hljs-comment">// Preview for the pdf</span>
create_preview( <span class="hljs-variable">$inp_file</span> );
}
<span class="hljs-keyword">else</span> {
<span class="hljs-keyword">echo</span> <span class="hljs-string">"Thefile "</span> . <span class="hljs-variable">$inp_file</span> . <span class="hljs-string">" is not a valid PDF document.\n"</span>;
}
}
__main__();
<span class="hljs-meta">?></span>
</code></code>

Code execution starts with the _main_() function, which fetches the PDF file on the command line and verifies its validity. If the file is valid, PHP will execute the Ghostscript command.

Output:

<code>
<code class="language-bash hljs">$ php pdf_preview.php input.pdf
Executing <span class="hljs-built_in">command</span>...
GPL Ghostscript 9.22 (2022-08-05)
Copyright (C) 2022 Artifex Software, Inc.All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC <span class="hljs-keyword">for</span> details.
Processing pages 1 through 1.
Page 1
Preview created !!
</code></code>

Convert PDF document to preview image using PHP and ImageMagick

  1. Start by installing all ImageMagick binaries into your system. Run the following command to install ImageMagick dependencies.

    <code>
    <code class="language-bash hljs"><span class="hljs-variable">$sudo</span> dnf install <strong class="keylink">GC</strong>c php-devel php-pear
    </code></code>
  2. Run the following command to install ImageMagick.

    <code>
    <code class="language-bash hljs">$ sudo dnf install ImageMagick ImageMagick-devel
    </code></code>
  3. Then, let's install the PHP wrapper class.

    <code>
    <code class="language-bash hljs">$ sudo pecl install imagick
    $ sudo bash -c <span class="hljs-string">"echo "</span>extension=imagick.so<span class="hljs-string">" > /etc/php.d/imagick.ini"</span>
    </code></code>
  4. For users using it on LAMP Server, you must restart the Apache Network server.

    <code>
    <code class="language-bash hljs">$ sudo service <strong class="keylink">Http</strong>d restart
    </code></code>
  5. At this point, everything we need is ready. We can now use the earlier PHP script and edit the create_preview() function.

    <code>
    <code class="language-php hljs"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">create_preview</span> (<span class="hljs-params"> <span class="hljs-variable">$file</span> </span>) </span>{
     <span class="hljs-variable">$output_format</span> = <span class="hljs-string">"jpeg"</span>;
     <span class="hljs-variable">$preview_page</span> = <span class="hljs-string">"1"</span>;
     <span class="hljs-variable">$resolution</span> = <span class="hljs-string">"300"</span>;
     <span class="hljs-variable">$output_file</span> = <span class="hljs-string">"imagick_preview.jpg"</span>;
    
     <span class="hljs-keyword">echo</span> <span class="hljs-string">"Fetching preview...\n"</span>;
     <span class="hljs-variable">$img_data</span> = <span class="hljs-keyword">new</span> Imagick();
     <span class="hljs-variable">$img_data</span>->setResolution( <span class="hljs-variable">$resolution</span>, <span class="hljs-variable">$resolution</span> );
     <span class="hljs-variable">$img_data</span>->readImage( <span class="hljs-variable">$file</span> . <span class="hljs-string">"["</span> . (<span class="hljs-variable">$preview_page</span> - <span class="hljs-number">1</span>) . <span class="hljs-string">"]"</span> );
     <span class="hljs-variable">$img_data</span>->setImageFormat( <span class="hljs-variable">$output_format</span> );
    
     file_put_contents( <span class="hljs-variable">$output_file</span>, <span class="hljs-variable">$img_data</span>, FILE_USE_INCLUDE_PATH );
    }
    </code></code>

    Output result:

    <code>
    <code class="language-bash hljs">$ php pdf_preview.php input.pdf
    Fetching preview...
    </code></code>

This is how we create preview image from PDF document on PHP. Both methods have similar basic functionality. Your choice depends on your preferences.

The above is the detailed content of Convert PDF document to preview image in PHP. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:lsjlt.com. If there is any infringement, please contact admin@php.cn delete