Преобразование многостраничного PDF в изображения с помощью PHP библиотек - PullRequest
0 голосов
/ 06 мая 2020

Я искал StackOverFlow и google в течение двух дней, так и не нашел решения. Я пытаюсь создать сценарий PHP, который:

  • Принимает PDF-файл, загруженный на мой веб-сайт
  • Преобразует каждую страницу документа в отдельное изображение
  • Отображает преобразованные изображения

Большинство пользователей, задававших подобные вопросы, обращаются к ImageMagick, но моим идеальным решением будет библиотека PHP, знаете ли вы ее?

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

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 страниц предварительного просмотра.

Он имеет следующие приятные особенности:

  1. Для рендеринга PDF используется poppler, а не GhostScript, поэтому он может напрямую обращаться к библиотеке. Напротив, такие пакеты, как imagick, используют GhostScript и должны обрабатывать документы через скрытые временные файлы. Это дает полезное увеличение скорости.

  2. Poppler создает высококачественные изображения со сглаживанием. С помощью GhostScript вам необходимо выполнить рендеринг с более высоким разрешением, а затем уменьшить масштаб, что сделает его еще медленнее.

  3. Он выполняет прогрессивный рендеринг (внутренне страницы визуализируются как серия фрагментов), поэтому вы можете создавать выходные файлы с очень высоким разрешением, если используете sh.

Poppler - это GPL, поэтому вам нужно быть немного осторожным, если вы распространяете программу, созданную с ее использованием .

0 голосов
/ 07 мая 2020

По первому и третьему пунктам это много информации или руководств в Интернете.

Для второго пункта вы можете использовать этот composer пакет: https://github.com/spatie/pdf-to-image

...