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 страниц предварительного просмотра.
Он имеет следующие приятные особенности:
Для рендеринга PDF используется poppler, а не GhostScript, поэтому он может напрямую обращаться к библиотеке. Напротив, такие пакеты, как imagick, используют GhostScript и должны обрабатывать документы через скрытые временные файлы. Это дает полезное увеличение скорости.
Poppler создает высококачественные изображения со сглаживанием. С помощью GhostScript вам необходимо выполнить рендеринг с более высоким разрешением, а затем уменьшить масштаб, что сделает его еще медленнее.
Он выполняет прогрессивный рендеринг (внутренне страницы визуализируются как серия фрагментов), поэтому вы можете создавать выходные файлы с очень высоким разрешением, если используете sh.
Poppler - это GPL, поэтому вам нужно быть немного осторожным, если вы распространяете программу, созданную с ее использованием .