遵循此处的指南:https://www.petewilcock.com/using-poppler-pdftotext-and-other-custom-binaries-on-aws-lambda/,我能够使用EC2获得二进制文件。但是现在对于最后一步,我似乎找不到找到使pdf2image使用poppler路径的方法。出现错误:
"errorMessage": "Unable to get page count. Is poppler installed and in PATH?",
"errorType": "PDFInfoNotInstalledError",
我尝试过的事情:
convert_from_bytes()
convert_from_bytes()
convert_from_bytes()
使用该指南中的package.zip添加一个lambda层,并添加映射到/ opt /的环境变量PATH 4a。做同样的事情并将其映射到/ opt / lib /
4b。做同样的事情并将其映射到/ opt / bin /
我的上述之一的lambda:
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."
}),
}
我的package.zip
如下:
+--lib
| +--libpoppler.so.70
| +--libtiff.so.5
| +--etc...
+--bin
| +--pdftoppm
| +--pdftotext
| +--etc...
答案 0 :(得分:1)
了解问题
好吧,我在前两天对此进行了研究,甚至深入研究pdf2image软件包以了解为什么会发生错误。
这是导致错误的原因: pdf2image python软件包使用子进程库来运行二进制文件(例如pdfinfo,pdftocairo,...等)
并运行pdfinfo /path/to/pdf/file
之类的Linux命令
并且似乎压缩后的二进制文件位于chmod -R 750
上(在我的情况下),这阻止子进程库运行导致错误“ permission否认”的命令,然后该错误返回pdf2image软件包以告诉您相同的错误脸。
解决方法:
通过运行chmod -R 777 .
然后在运行方法convert_from_path()
时将poppler_path
设置为您的二进制格式。
就是这样
注意:我创建了一个图层,仅包含要使用的popplet-utils二进制文件 在功能中。