我已经在 StackOverFlow 和谷歌上搜索了两天,仍然无法找到解决方案。我想要做的是创建一个 PHP 脚本:
- 将 PDF 上传到我的网站
- 将文档的每一页转换为单独的图像
- 显示转换后的图像
大多数提出类似问题的用户都会使用 ImageMagick,但我的完美解决方案是 PHP 库,你知道吗?
我已经在 StackOverFlow 和谷歌上搜索了两天,仍然无法找到解决方案。我想要做的是创建一个 PHP 脚本:
大多数提出类似问题的用户都会使用 ImageMagick,但我的完美解决方案是 PHP 库,你知道吗?
对于第一点和第三点,它们是网络上的大量信息或教程。
对于第二点,您可以使用这个作曲家包:https ://github.com/spatie/pdf-to-image
php-vips可以快速完成此操作,并且只需要少量内存。
例如:
#!/usr/bin/env php
<?php
require __DIR__ . '/vendor/autoload.php';
use Jcupitt\Vips;
for ($i = 1; $i < count($argv); $i++) {
$image = Vips\Image::newFromFile($argv[$i]);
$n_pages = $image->get("n-pages");
echo($argv[$i] . " has " . $n_pages . " pages\n");
for ($n = 0; $n < $n_pages; $n++) {
echo(" rendering page " . $n . " ...\n");
$page = Vips\Image::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 个预览页面。
它具有以下不错的功能:
它使用 poppler 进行 PDF 渲染,而不是 GhostScript,因此它可以直接调用库。相比之下,像 imagick 这样的包使用 GhostScript 并且必须通过隐藏的临时文件来处理文档。这提供了有用的速度增加。
Poppler 将生成高质量、抗锯齿的图像。使用 GhostScript,您需要以更高的分辨率进行渲染,然后按比例缩小,使其更慢。
它进行渐进式渲染(在内部,页面被渲染为一系列块),因此您可以根据需要生成非常高分辨率的输出文件。
Poppler 是 GPL,因此如果您要分发使用它构建的程序,您确实需要小心一点。