我试图使用pdf2image库,特别是convert_from_bytes方法使用pytesseract将pdf转换为txt文件。我的应用程序在本地运行,但我想将应用程序部署到heroku。我已经尝试将python-poppler添加到我的pipfile中,但它在部署期间无法下载。我一直在尝试使用buildpack https://github.com/survantjames/heroku-buildpack-poppler.git,但是当我尝试使用应用程序时,我在日志中得到此错误。
2021-02-24T02:02:07.068105+00:00 app[web.1]: pages = convert_from_bytes(file,500)
2021-02-24T02:02:07.068106+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/pdf2image/pdf2image.py", line 270, in convert_from_bytes
2021-02-24T02:02:07.068124+00:00 app[web.1]: return convert_from_path(
2021-02-24T02:02:07.068131+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/pdf2image/pdf2image.py", line 97, in convert_from_path
2021-02-24T02:02:07.068132+00:00 app[web.1]: page_count = pdfinfo_from_path(pdf_path, userpw, poppler_path=poppler_path)["Pages"]
2021-02-24T02:02:07.068132+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/pdf2image/pdf2image.py", line 471, in pdfinfo_from_path
2021-02-24T02:02:07.068133+00:00 app[web.1]: raise PDFPageCountError(
2021-02-24T02:02:07.068133+00:00 app[web.1]: pdf2image.exceptions.PDFPageCountError: Unable to get page count.
2021-02-24T02:02:07.068134+00:00 app[web.1]: pdfinfo: error while loading shared libraries: libpng12.so.0: cannot open shared object file: No such file or directory
我能做些什么让poppler安装在heroku上,并在我的应用程序中工作?谢谢!
解决方案1:
查找包含libpng12.so.0
的包:
https://packages.debian.org/search?lang=en&suite=jessie&arch=i386&mode=filename&searchon=contents&keywords=libpng12.so.0
它是libpng12-0:
https://packages.debian.org/en/jessie/libpng12-0
libpng是一个实现读写PNG(可移植网络图形)格式文件接口的库。
你正在做什么(你正在从pdf创建图像)。这是你的Poppler构建包所需要的依赖项。
你已经成功地安装了Python构建包和Poppler构建包。你需要添加第三个构建包,首先安装Poppler的依赖项。
您可以使用Apt buildpack: https://github.com/heroku/heroku-buildpack-apt
在那里您指定一个Aptfile
,内容为libpng12-0
。
然后是关于
的错误信息2021-02-24T02:02:07.068134+00:00 app[web.1]: pdfinfo: error while loading shared libraries: libpng12.so.0: cannot open shared object file: No such file or directory
应该消失。如果你用同样的方法解决了其他依赖项,可能会弹出新的错误。
解决方案2:
或者你只需修复Poppler构建包:https://github.com/survantjames/heroku-buildpack-poppler
你可以从ReadMe中看到,当他们创建它时,它是为Cedar-14。这个堆栈不再可用。您可以尝试使其与Heroku-20堆栈兼容。
在compile
中,你必须指示它安装缺失的依赖项。
这里可以看到Calibre的依赖项是如何安装的。
如果问题不是依赖问题,而是安装Poppler本身的问题,解决方案1将不起作用。
解决方案3:
可能已经有支持Heroku-20栈的Poppler构建包了。你尝试的Poppler构建包是5年前的。有许多第三方Poppler构建包,例如这个刚刚超过1年。
你得试一试。
我不知道哪个解决方案是正确的。你得试一试。例如,解决方案3目前可能无法使用。Heroku-20堆栈是新的,人们可能还没有使它与新的Heroku堆栈兼容。也许我链接的构建包是Heroku-18堆栈的解决方案。
解决方案2总是有效的,但它需要一些构建包如何工作以及如何创建它们的知识。它是最"复杂"的。解决方案也是最优雅的一个。
解决方案1可能有效,但不是必需的,并且更容易修复。