PDFInfoNotInstalledError AWS Lambda не может найти путь Poppler с pdf2image - PullRequest
1 голос
/ 20 июня 2020

Следуя руководству здесь: https://www.petewilcock.com/using-poppler-pdftotext-and-other-custom-binaries-on-aws-lambda/ Мне удалось получить двоичные файлы с помощью EC2. Но теперь, что касается последнего шага, я, кажется, не могу найти способ заставить pdf2image использовать путь Поплера. Получение ошибки:

  "errorMessage": "Unable to get page count. Is poppler installed and in PATH?",
  "errorType": "PDFInfoNotInstalledError",

То, что я пробовал:

  1. Добавление лямбда-слоя с помощью package.zip из этого руководства, затем вызов convert_from_bytes() без poppler_path
  2. Добавление слоя лямбда с package.zip из этого руководства, затем вызов convert_from_bytes() с poppler_path = '/ opt / lib /'
  3. Добавление каталога / lib и / bin непосредственно в мою лямбда и вызов convert_from_bytes() с poppler_path = '/ var / task / lib /'
  4. Добавление слоя лямбда с package.zip из этого руководства и добавление переменной среды PATH, сопоставленной с / opt / 4a . Проделаем то же самое и сопоставим его с / opt / lib /

    4b. Проделаем то же самое и сопоставим его с / opt / bin /

Моя лямбда для одного из приведенных выше:

import json
import base64
import os
from uuid import uuid4
from pdf2image import convert_from_bytes

POPPLER_PATH = '/opt/lib/'

def text_process_handler(event, context):
    document = bucketHelper.get_bucket_object('<Bucket>', '<document>.pdf')
    images = convert_from_bytes(document,dpi=150, poppler_path=POPPLER_PATH)

    return {
        "statusCode": 200,
        "body": json.dumps({
            "message": "Successful request."
        }),       
    }

My package.zip выглядит так:

+--lib
|  +--libpoppler.so.70
|  +--libtiff.so.5
|  +--etc...
+--bin
|  +--pdftoppm
|  +--pdftotext
|  +--etc...

1 Ответ

1 голос
/ 22 июня 2020

Понять проблему

Ну, я работал над этим в течение предыдущих 2 дней, и даже глубоко погрузился в пакет pdf2image, чтобы понять, почему возникает ошибка.

вот что вызывает ошибку: пакет pdf2image python использует библиотеку подпроцесса для запуска двоичных файлов, таких как (pdfinfo, pdftocairo, ... et c)

и он запускает команду Linux, например pdfinfo /path/to/pdf/file, и кажется, что двоичные файлы при сжатии были на chmod -R 750 (в моем случае), и это не позволяет библиотеке подпроцесса запускать команду, вызывающую ошибку «доступ запрещен», которая затем возвращает pdf2image, чтобы сообщить вам о той же ошибке, с которой вы сталкиваетесь.

Как решить:

перед заархивированием двоичных файлов убедитесь, что файлы модифицируются на 777, запустив chmod -R 777 .

, затем при запуске метода convert_from_path() установите poppler_path в размер вашего двоичного файла.

и это

Примечание : Я создаю слой, содержащий только popplet-utils двоичные файлы для использования в функции.

...