0

我正在尝试使用 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

我该怎么做才能在 heroku 上安装 poppler 并在我的应用程序中工作?谢谢!

4

1 回答 1

1

解决方案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 buildpack 所需的依赖项。

您已经成功地安装了 Python buildpack 以及您的 Poppler buildpack。您需要添加第三个 buildpack,它首先安装 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 buildpack:https ://github.com/survantjames/heroku-buildpack-poppler

正如您从他们创建时的自述文件中看到的那样,它是针对 Cedar-14 的。此堆栈不再可用。您可以尝试使其与 Heroku-20 堆栈兼容。

compile您必须指示它安装缺少的依赖项。

在这里,您可以看到 Calibre 的依赖项是如何安装的。

如果问题不是依赖问题,而是安装 Poppler 本身解决方案 1 将不起作用。


解决方案3:

可能已经有一个支持 Heroku-20 堆栈的 Poppler buildpack。您尝试的 Poppler buildpack 已有 5 年历史。有许多第三方的 Poppler buildpacks,例如这个只有 1 年多一点的历史。
您将不得不尝试一下。


哪个解决方案是正确的,我不知道。您将不得不尝试一下。例如,解决方案 3 目前可能不可用。Heroku-20 堆栈是新的,人们可能尚未使其与新的 Heroku 堆栈兼容。也许我链接的 buildpack 是 Heroku-18 堆栈的解决方案。

解决方案 2 始终有效,但它需要了解一些构建包如何工作以及如何创建它们的知识。这是最“复杂”的解决方案,但也是最优雅的解决方案。

解决方案 1 可能有效但不是必需的,并且更容易修复。

于 2021-02-24T08:36:06.910 回答