在php和/或symfony中管理大型PDF文件

时间:2019-07-11 11:42:55

标签: pdf php-7 symfony-3.4

两个星期以来我有问题。我正在开发一个在线新闻系统。 PDF新闻文件很大(例如150 MB)。结果,由于连接量问题,用户将无法轻松下载这些文件以进行读取。 作为一种解决方案,我选择将PDF文件分为几个小尺寸(平均150 kb)的压缩图像,并构建一个新的小尺寸PDF文件。这是带有PdfToImage和Imagick库的脚本:

<?php

ini_set('max_execution_time', 1000);

require __DIR__.'/vendor/autoload.php';


function compress($path) {
    $im = new Imagick($path);

    $im->optimizeImageLayers();

    $im->setImageCompression(Imagick::COMPRESSION_JPEG);
    $im->setImageCompressionQuality(25);

    $im->writeImages($path, true);
}


$pdf = new Spatie\PdfToImage\Pdf('filePDF.pdf');

foreach (range(1, $pdf->getNumberOfPages()) as $pageNumber) {
    $path = './images/page'.$pageNumber.'jpg';

    $pdf->setPage($pageNumber)
        ->saveImage($path);

    compress($path);
} 

// Images to pdf
$i = 1;
$path = './images/page';
$images = array();

while(true) {
    $filename = $path . $i . 'jpg';
    if(!file_exists($filename)) {
        break;
    }

    $images[] = $filename;
    $i++;
}

$pdf = new Imagick($images);
$pdf->setImageFormat('pdf');
$pdf->writeImages('output.pdf', true);

echo "Completed...";
?>

此解决方案遇到了几个问题:

  • 对于那些大文件,此脚本需要很多时间
  • PDF文件(生成的PDF文件)中的图像质量丢失并且内容不清楚。
  • php脚本的最大执行时间取决于图像的大小。

请,我想在您的帮助下解决此问题。请给我建议一个可能的解决方案。谢谢。

0 个答案:

没有答案