Я знаю, как использовать 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 важно быстро закончить, чтобы сэкономить ресурсы и избежать тайм-аутов!)