"non-zero exit status 1"由于在Windows开发服务器上的虚拟环境中使用pypdftk在Django项目中填写PDF表单时找不到pdf文件



下面的python代码成功地填写了一个pdf表单:

import pypdftk
data_dict = {key:value pairs}
PDF_PATH = 'form.pdf'                #form to be filled out in same folder as the file executing this code
out_file = 'out_file.pdf'            #completed pdf file
generated_pdf = pypdftk.fill_form(
pdf_path = PDF_PATH,
datas = data_dict,
out_file = out_file,
)

然而,在我的django项目中使用的相同代码导致了以下错误消息:

Error: Unable to find file.
Error: Failed to open PDF file:
form.pdf
Errors encountered.  No output created.
Done.  Input errors, so no output created.
... REMAINDER OF TRACEBACK EXCLUDED FOR BREVITY IF YOU WANT TO SEE IT I'LL POST...
raise subprocess.CalledProcessError(retcode, cmd, output=output) output=output)                                      df fill_form C:UsersHomeAppDataLocalTemptmpbqq__7c4 output out_file.pdf flatten
subprocess.CalledProcessError: Command 'pdftk l_a_r.pdf fill_form C:UsersHomeAppDataLocalTemptmpbqq_0 87495_7c4 output out_file.pdf flatten'
returned non-zero exit status 1.

pypdftk安装在项目运行的虚拟环境中。pdftk服务器被添加为windows路径变量。在上面的示例中,每当发生这种情况时,错误消息末尾引用的临时文件都包含XML中的所有预期数据。

我尝试了以下代码组合来尝试使其工作:

  1. 在视图函数中运行上述代码,将pdf表单填写在与views.py文件相同的文件夹中:
import pypdftk
def filler_view(request):
form = MyForm()
if request.method =='POST':
#code to successfully populate dictionary data_dict with form data

PDF_PATH = 'form.pdf'                #form to be filled out in same folder as the file executing this code
out_file = 'out_file.pdf             #completed pdf file
generated_pdf = pypdftk.fill_form(
pdf_path = PDF_PATH,
datas = data_dict,
out_file = out_file,
)
return render(request, 'success.html')
  1. 将代码和文件存储在文件夹中并导入以调用视图中的相关函数:
-appFolder
-pfd_filler_folder
-form.pdf
-form_filler.py
-views.py
views.py
from appFolder.pdf_filler_folder import form_filler as f
def filler_view(request):
form = MyForm()
if request.method =='POST':
#code to successfully populate dictionary data_dict with form data
f.fill_form(data_dict, 'output.pdf')
form_filler.py:
import pypdftk
def fill_form(data_dict, out_file):
PDF_PATH = 'form.pdf'
generated_pdf = pypdftk.fill_form(
pdf_path = PDF_PATH,
datas = data_dict,
out_file = out_file,
)
  1. 使用form.pdf文件的c:...的完整路径运行以上两项

我还验证了,当django项目不执行时,我可以在两个存储驱动器上的同一文件夹中,从django工程本身成功地用正在执行的.py文件和form.pdf文件填写表格。pdftk发现forms.py在这种情况下没有任何问题。

我相信文件未找到错误消息是关键,因为它似乎指的是我试图填写的pdf表格。从1500年到1800年,我一直在研究这个问题,但我一直没能让它发挥作用,尽管我相信我的错误消息表明cl执行命令中缺少一个参数。我不确定这会是什么,因为所有参数似乎都存在并且正确。

有趣的是,我的一个朋友在windows中也遇到了同样的错误消息。我知道pdftk有时在窗户里会很敏感,我想我可能错过了一个细微之处。

我想要的结果是在我的django项目中填写一份pdf表格,通过发布请求从表格中获得数据。

我欢迎有人告诉我为什么pdftk在我的django项目中使用表单文件时很难看到或使用表单文件,并为我指明正确的方向

我知道使用pdftk还有其他选择,但pdftk是最简单的,老实说,pypdftk也是迄今为止我发现的唯一一个可以可靠地使用python在Windows中填写pdf表单的库。我不想继续生成我自己的副本表单并用数据填充它,但我知道这也是一种选择。

刚才在Reddit上回答的问题:在Django中,最终由wsgi.pymanage.py负责。在此基础上,将form.pdf文件放在与wsgy.py相同的文件夹中解决了问题,代码现在按预期运行,使用未绑定的表单将数据发布回视图,填写pdf表单并保存与所述数据的副本。希望这能帮助其他遇到这种情况的人!

最新更新