使用PHP库将多页PDF转换为图像



我已经在StackOverFlow和谷歌上搜索了两天,仍然无法找到解决方案。我想做的是创建一个PHP脚本:

  • 将PDF上传到我的网站
  • 将文档的每页转换为单独的图像
  • 显示转换后的图像

大多数提出类似问题的用户都会使用ImageMagick,但我的完美解决方案是PHP库,你知道吗?

关于第一点和第三点,它们是网上的许多信息或教程。

对于第二点,您可以使用这个composer包:https://github.com/spatie/pdf-to-image

php-vip可以快速完成这项工作,并且只需要少量内存。

例如:

#!/usr/bin/env php
<?php
require __DIR__ . '/vendor/autoload.php';
use JcupittVips;
for ($i = 1; $i < count($argv); $i++) {
$image = VipsImage::newFromFile($argv[$i]);
$n_pages = $image->get("n-pages");
echo($argv[$i] . " has " . $n_pages . " pagesn");
for ($n = 0; $n < $n_pages; $n++) {
echo("  rendering page " . $n . " ...n");
$page = VipsImage::newFromFile($argv[$i], [
"dpi" => 30,
"page" => $n,
# this enables image streaming
"access" => "sequential"
]);
$page->writeToFile($argv[$i] . "_page_" . $n . ".png");
}
}

在30 DPI的情况下,A4页面的宽度约为250像素,这对于预览来说是可以的。在这台2015年的普通笔记本电脑上,我看到了:

$ time ./convert-vips.php ~/pics/nipguide.pdf
/home/john/pics/nipguide.pdf has 58 pages
rendering page 0 ...
rendering page 1 ...
...
rendering page 56 ...
rendering page 57 ...
real    0m1.765s
user    0m1.645s
sys     0m0.230s

不到两秒即可呈现58个预览页面。

它有以下不错的功能:

  1. 它使用poppler进行PDF渲染,而不是GhostScript,因此它可以直接调用库。相比之下,像imagick这样的包使用GhostScript,并且必须通过隐藏的临时文件来处理文档。这样可以有效地提高速度。

  2. Poppler将生成高质量、抗锯齿的图像。使用GhostScript,需要以更高的分辨率进行渲染,然后按比例缩小,使渲染速度更慢。

  3. 它进行渐进式渲染(在内部,页面被渲染为一系列块(,因此如果您愿意,可以生成非常高分辨率的输出文件。

Poppler是GPL,所以如果您正在分发使用它构建的程序,则需要稍微小心。

最新更新