按照这里的指南: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",我试过的是:
从指南中添加带有poppler_path
convert_from_bytes() -- /lib和/bin目录--直接进入lambda,用poppler_path = '/var/task/lib/'
convert_from_bytes(),使用指南中的package.zip调用lambda层,并添加映射到/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."
}),
}我的package.zip看起来像:
+--lib
| +--libpoppler.so.70
| +--libtiff.so.5
| +--etc...
+--bin
| +--pdftoppm
| +--pdftotext
| +--etc...发布于 2020-06-22 13:08:50
理解问题
在过去的两天里,我一直在研究这个问题,甚至深入到pdf2image包中去了解错误发生的原因。
这里是什么导致了错误: pdf2image python包使用子流程库来运行二进制文件,比如(pdfinfo,pdftocairo,...etc)
它运行了一个类似于pdfinfo /path/to/pdf/file的Linux命令,在压缩后的二进制文件似乎在chmod -R 750上(在我的例子中),这阻止了子进程库运行导致错误“拒绝权限”的命令,然后返回pdf2image包来告诉您所面临的相同错误。
如何解决:
:
在压缩二进制文件之前,通过运行chmod -R 777 .确保文件mods在777上
然后,在运行方法时,convert_from_path()将poppler_path设置为二进制扩展。
就是这样
注释:我创建了一个层,只包含要在函数.
中使用的popplet-utils二进制文件。
https://stackoverflow.com/questions/62483716
复制相似问题