我在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'的错误。这是什么问题,或者它是另一个更好的库?
答案 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'