php - 使用 Imagick 将每个 PDF 页面保存为图像

标签 php codeigniter pdf imagemagick imagick

我在下面有以下 php 函数,可将本地 PDF 文件转换为图像。简而言之,我希望将每个 PDF 页面转换为单独的图像。

该函数将 PDF 转换为图像 - 但仅限于最后一页。我希望将 PDF 的每一页 转换为图像并编号。不仅仅是 PDF 的最后一页。

目前,此函数将example.pdflast 页面转换为example-0.jpg。我确定问题出在 for 方法中。我错过了什么?

$file_name = 'example.pdf'; // using just for this example, I pull $file_name from another function

function _create_preview_images($file_name) {

    // Strip document extension
    $file_name = basename($file_name, '.pdf');

    // Convert this document
    // Each page to single image
    $img = new imagick('uploads/'.$file_name.'.pdf');

    // Set background color and flatten
    // Prevents black background on objects with transparency
    $img->setImageBackgroundColor('white');
    $img = $img->flattenImages();

    // Set image resolution
    // Determine num of pages
    $img->setResolution(300,300);
    $num_pages = $img->getNumberImages();

    // Compress Image Quality
    $img->setImageCompressionQuality(100);

    // Convert PDF pages to images
    for($i = 0;$i < $num_pages; $i++) {         

        // Set iterator postion
        $img->setIteratorIndex($i);

        // Set image format
        $img->setImageFormat('jpeg');

        // Write Images to temp 'upload' folder     
        $img->writeImage('uploads/'.$file_name.'-'.$i.'.jpg');
    }

    $img->destroy();
}

最佳答案

似乎我的代码大部分 都是正确的。问题是,我错误地使用了 $img->flattenImages();。这一系列图像合并为一个图像。很像 Photoshop 在导出 jpg 时将所有可见图层拼合成图像的方式。

我删除了上面的行,并按预期写入了各个文件。

关于php - 使用 Imagick 将每个 PDF 页面保存为图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20598936/

相关文章:

php pdo代码搜索逗号分解输入

php - 在 LEFT JOIN PHP MySQL CodeIgniter 中选择最新行

swift - 将 base64 字符串作为 PDF 显示到 Web View 中

pdf - 使用 Inkscape 从 pdf 中提取矢量图形

java - 为什么我尝试用 java 解密 RSA 但用 php 加密时会出现此异常?

php - 正则表达式:如何捕获以匹配的字符集开头的组

php - AJAX 调用不执行 JavaScript 函数。为什么?解决方法?

Javascript 验证在 codeigniter 中不起作用

php - Ajax 分页中的问题

php - 如何使用 Javascript 或 PHP 将 Web 表单导出为 PDF