PHP-将base64文件内容转换为PDF

时间:2019-12-19 16:55:04

标签: php symfony symfony4

我在Symfony中有一个API,在React中有一个前端。 我正在尝试上传文档(jpg,png或pdf),但我只想将pdf文件存储在目录中。因此,当用户发送图像时,我想在上传之前将其转换为pdf。

    public function upload($rawData, $extension, $key, &$contentType)
    {
        $rawData = explode(';base64,', $rawData);
        $contentType = substr($rawData[0], 5);
        $rawFileData = $rawData[1];

        if ($extension !== "pdf" && $extension !== "PDF") {
            $tmpDir = '/tmp';
            $image = $tmpDir . '/' . $key . '.' . $extension;
            file_put_contents($image, base64_encode($rawFileData));

            $imagick = new \Imagick();
            $imagick->readImage($image) ;
            $imagick->writeImages($tmpDir. '.pdf', false) ;
        }
    }

我已经尝试过使用Imagick库,但这给了我一个类似'convert:Not JPEG file'的错误。这是什么问题,或者它是另一个更好的库?

1 个答案:

答案 0 :(得分:0)

我最终使用了fpdf和fpdi库

composer require setasign/fpdf
composer require setasign/fpdi
 public function upload($rawData, $extension, $key, &$contentType)
 {
     $rawData = explode(';base64,', $rawData);
     $contentType = substr($rawData[0], 5);
     $rawFileData = $rawData[1];

     if ($extension !== "pdf" && $extension !== "PDF") {
         // upload image
         $tmpDir = $this->getParameter('tmpDir');
         $image = $tmpDir . '/' . $key . '.' . $extension;
         file_put_contents($image, base64_decode($rawFileData));

         // create pdf and upload it
         $pdf = new Fpdi();
         $pdf->AddPage();
         $pdfFile = $tmpDir . '/' . $key . '.pdf';
         $pdf->Image($image,0,0,$pdf->GetPageWidth(),$pdf->GetPageHeight());
         $pdf->Output('F', $pdfFile);

         //get pdf raw data
         $data = file_get_contents($pdfFile);
         $rawData = 'data:application/pdf;base64,' . base64_encode($data);
         unlink($image);
     }
}

我的services.yml:

parameters:
    tmpDir: '%kernel.project_dir%/public/tmp'