Миниатюра первой страницы PDF из потока в GraphicsMagick - PullRequest
0 голосов
/ 26 июня 2018

Я знаю, как использовать GraphicsMagick, чтобы сделать эскиз первой страницы PDF-файла, если у меня есть PDF-файл и я запускаю gm локально.Я могу просто сделать это:

gm(pdfFileName + "[0]")
  .background("white")
  .flatten()
  .resize(200, 200)
  .write("output.jpg", (err, res) => {
    if (err) console.log(err);
  });

Если у меня есть файл с именем doc.pdf, тогда передача doc.pdf[0] в gm работает прекрасно.

Но моя проблема в том, что я генерирую эскизына лямбда-функции AWS, а лямбда принимает в качестве входных данных потоковые данные из исходного сегмента S3.Соответствующий фрагмент моей лямбды выглядит так:

// Download the image from S3, transform, and upload to a different S3 bucket.
async.waterfall([
  function download(next) {
    s3.getObject({
      Bucket: sourceBucket,
      Key: sourceKey
    },
    next);
  },

  function transform(response, next) {
    gm(response.Body).size(function(err, size) {       // <--- gm USED HERE
    .
    .
    .

Все работает, но для многостраничных PDF-файлов gm создает миниатюру с последней страницы PDF-файла.Как я могу получить [0] там?Я не видел селектора страниц в документации gm , поскольку во всех их примерах использовались имена файлов, а не потоки. Я считаю, что должен быть API, но я не нашел его.

(Примечание:[0] действительно важен не только потому, что последняя страница многостраничных PDF-файлов иногда пуста, но я заметил, что при запуске gm в командной строке с большими файлами PDF, [0] очень быстро возвращается, тогда как без [0]весь pdf сканируется. В AWS Lambda важно быстро закончить, чтобы сэкономить ресурсы и избежать тайм-аутов!)

1 Ответ

0 голосов
/ 11 июля 2018

Вы можете использовать метод .selectFrame(), который эквивалентен указанию [0] непосредственно в имени файла.

В вашем коде:

function transform(response, next) {
    gm(response.Body)
        .selectFrame(0)       // <--- select the first page
        .size(function(err, size) {
        .
        .
        .

Не смущайтесьНаименование функции.Он работает не только с кадров для GIF-файлов, но также отлично работает с страниц для PDF-файлов.

Оформить заказ этой функции источник на GitHub.

Кредиты @ BenFortune за его ответ на аналогичный вопрос о первом кадре GIF.Я взяла его за вдохновение и проверила это решение в формате PDF, оно действительно работает.

Надеюсь, это поможет.

...