【问题标题】:PHP Number of pages in a PDF file via ImageMagickPHP 通过 ImageMagick 的 PDF 文件中的页数
【发布时间】:2014-12-28 17:22:19
【问题描述】:

我正在使用以下代码来获取 PDF 文件中的页数。

$img = new imagick();
$img->setResolution(200,200);
$img->readImage("{$FileName}");
$NumberOfPages = $img->getNumberImages();
echo "$NumberOfPages";

代码有效,但速度很慢(每页 0.5 秒。29 页的 PDF 需要 15 秒才能交付结果)。

我错过了什么吗? 必须有更快的方法:

1) 获取一个pdf的页数

2) 将单个页面转换为图片

请注意,只有在 1) 完成后,2) 才有可能。 当 PDF 只有 16 页时,转换第 39 页是没有意义的。

任何帮助将不胜感激。

大卫

【问题讨论】:

    标签: php pdf imagemagick


    【解决方案1】:

    我试用了您的代码,但它不适用于我拥有的 PDF。 我使用 Free PDF 创建 PDF。可能是生成的 PDF 没有线性化。

    我在问题 1098156 下找到了一些代码,它似乎可以与我拥有的 PDF 一起使用:

    function count_pages($pdfname) {
    $pdftext = file_get_contents($pdfname);
    $num = preg_match_all("/\/Page\W/", $pdftext, $dummy);
    return $num;
    }
    

    【讨论】:

    • 出色的解决方案。对于 30 页的 pdf,大约需要 5 秒(使用 Imagick),但这个在 50 毫秒内完成。
    • 这不适用于具有某些压缩类型的 PDF。如果您需要更广泛的支持,请使用 Imagick::getnumberimages()
    【解决方案2】:

    根据“检测 PDF 文件中的页面”。对于检测 PDF 文件页面的简单任务,我建议尽可能不要使用 imagemagick。 PDF 具有“线性化”布局功能 -> http://labs.appligent.com/pdfblog/linearization/ 从文件开头检测一些基本的 PDF 元数据。 这是一个获取页数的非常简单的代码,我使用来自网络的随机 10 个 PDF 文件对其进行了测试,每次都可以使用,并且应该比使用 imagemagick 的要快。

    这只是一个快速的代码,没有经过很好的测试,但应该给你一些想法,让你只用 PHP 完成这项工作。 也许不是所有的 PDF 文件都保证了线性化布局。

    $pdfcontent = file_get_contents("test.pdf", NULL, NULL, 0, 300);
    preg_match("~Linearized.*?\/N ([0-9]+)~s", $pdfcontent, $pages);
    if(isset($pages[1])){
        echo "Pages ".$pages[1];
    }
    

    【讨论】:

    • 这不适用于具有某些压缩类型的 PDF。 Imagick::getnumberimages() 确实有效。
    猜你喜欢
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    • 2021-12-28
    • 2019-04-17
    • 1970-01-01
    • 2016-10-26
    相关资源
    最近更新 更多