【发布时间】:2020-10-08 21:44:07
【问题描述】:
我有一个 Django 项目,它使用 Java 作为后台任务创建 PDF。有时该过程可能需要一段时间,因此客户端使用这样的轮询:
- 第一个请求启动构建过程并返回
None。 - 每个后续请求都会检查 PDF 是否已构建。
- 如果是,则返回 PDF。
- 如果没有,它会再次返回
None,并且客户端会安排另一个请求在 n 秒内再次检查。
我的问题是我不知道如何检查 PDF 是否已完成构建。 Java 进程分阶段创建文件。如果我只是检查 PDF 是否存在,那么返回的 PDF 通常是无效的,因为它仍在构建中。所以,我需要一个 is_pdf(path_to_file) 函数,如果文件是有效的 PDF,则返回 True,否则返回 False。
如果可能,我想在没有库的情况下执行此操作,但如有必要,我会使用库。
我在 Linux 上。
这是一个使用pdfminer 的解决方案,但对我来说似乎有点矫枉过正。
from pdfminer.high_level import extract_text
def is_pdf(path_to_file):
"""Return True if path_to_file is a readable PDF"""
try:
extract_text(path_to_file, maxpages=1)
return True
except:
return False
我希望有一个解决方案,它不需要安装大型库来检查文件是否是有效的 PDF。
【问题讨论】:
-
还有另一个线程用于使用 python 验证 pdf 文件。我认为这个答案对你来说应该足够了:stackoverflow.com/a/32654661/6430256
-
谢谢,但我已经查看过它并没有答案。
PyPDF2不再维护。可能有使用ReportLab的解决方案,但我不知道该怎么做。使用Popen()的解决方案看起来很有希望,但我无法实现。 -
我明白了,Popen 解决方案适用于 linux 环境。我正在检查 reportlab 模块,但到目前为止我还没有看到任何有用的东西来验证 pdf。
-
您仍然可以从操作系统中找出 Java 进程的 PID 是什么,并对其进行监控。当然,如果它是一项始终运行的服务,那么您可能就不走运了。
-
我更新了我的答案,为 PDFParser 和 PDFDocument 添加了另一个示例。如果 open() 函数不抛出异常,PDFDocument 或 PDFParser 可能会抛出异常。如果没有抛出异常,PDFDocument.info 属性可能有用。