转换图像为pdf php

jvidinwx  于 2023-02-03  发布在  PHP
关注(0)|答案(5)|浏览(251)

我正在使用csxi来扫描文档作为图像,但我必须上传PDF文件到服务器。我如何在PHP中转换图像为PDF?或者有什么方法可以使csxi扫描文档作为PDF而不是图像

yi0zb3m4

yi0zb3m41#

如果您的计算机上安装了ImageMagick,您可以使用ImageMagick bindings for PHP执行一些简单的PHP代码来完成此任务:

$im=new Imagick('my.png');
$im->setImageFormat('pdf');
$im->writeImage('my.pdf');

或者,如果你没有ImageMagick,你可以使用一个商业API,如Zamzar,它支持通过PHP将图像转换为PDF(更多信息见文档)。
使用此选项的代码为:

<?php
// Build request
$endpoint = "https://api.zamzar.com/v1/jobs";
$apiKey = "YOUR_API_KEY";
$sourceFilePath = "my.png";
$targetFormat = "pdf";

$sourceFile = curl_file_create($sourceFilePath);    
$postData = array(
  "source_file" => $sourceFile,
  "target_format" => $targetFormat
);

// Send request
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $endpoint);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, $apiKey . ":");
$body = curl_exec($ch);
curl_close($ch);

// Process response (with link to converted files)
$response = json_decode($body, true);
print_r($response);
?>
b4wnujal

b4wnujal2#

将图像包裹在HTML中,并使用一些HTML to PDF converter,如fpdfmpdf

dphi5xsq

dphi5xsq3#

您可以使用convertapi服务,易于安装:

composer require convertapi/convertapi-php
require_once('vendor/autoload.php');

use \ConvertApi\ConvertApi;

//get api key: https://www.convertapi.com/a/si
ConvertApi::setApiSecret('xxx');

$result = ConvertApi::convert('pdf', ['File' => '/dir/test.png']);

# save to file
$result->getFile()->save('/dir/file.pdf');

要转换多个文件和其他选项,请选中https://github.com/ConvertAPI/convertapi-php

6tdlim6h

6tdlim6h4#

这里使用的是Php 7.4,Laravel 7+,ImageMagick-7.1.0-Q16和Ghostscript gs10.00.0,如果文件夹JpgToPdf中包含任何文件,请删除它们,依此类推。

/**
     * jpg To pdf WEB
     *
     * @method convertJpgToPdf
     */
    public function convertJpgToPdf(Request $request)
    {
        try {
            //get list of files
            $files = Storage::files('JpgToPdf');

            /*get count of files and , 
            * check if any files contain
            * if any files contains
            * then
            * get the files name
            * delete one by one 
            */
            if(count($files) >1 )
            {
                foreach($files as $key => $value)
                {
                    //get the file name
                    $file_name = basename($value);

                    //delete file from the folder
                    File::delete(storage_path('app/JpgToPdf/'. $file_name));
                }
            }

            if ($request->has('jpeg_file')) 
            {
                $getPdfFile = $request->file('jpeg_file');

                $originalname = $getPdfFile->getClientOriginalName();

                $path = $getPdfFile->storeAs('JpgToPdf', $originalname);
            }

            // file name without extension
            $filename_without_ext = pathinfo($originalname, PATHINFO_FILENAME);

            //get the upload file
            $storagePath = storage_path('app/JpgToPdf/' . $originalname);

            $imagick = new Imagick();

            $imagick->setResolution(300, 300);
            
            $imagick->readImage($storagePath);

            $imagick->setImageCompressionQuality( 100 );

            $imagick->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);

            $imagick->setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE);

            $imagick->writeImage( storage_path('app/JpgToPdf/') . $filename_without_ext .'.pdf' );

            return response()->download(storage_path('app/JpgToPdf/') . $filename_without_ext .'.pdf' );
        
        } catch (CustomModelNotFoundException $exception) {
            // Throws error exception
            return $exception->render();
        }

    }
6qfn3psc

6qfn3psc5#

对于只有几张图片,可以用Chrome网络浏览器手动轻松地完成。你不需要互联网连接。
1.使用.html扩展名将以下内容保存在图像的同一文件夹中:

<html>
 <body>
 <img src="image.jpg" width="100%">
</body>
</html>

1.用谷歌浏览器打开html文件,

  1. Crtl + P打开打印对话框
    1.选择“保存为PDF”,将其保存在本地
    1.或者,您可以通过Google云打印将副本发送到smatphone

相关问题