0

pdftk用于处理 PDF 文件。

new_doc.save()
url = "/docs/" +settings.MEDIA_URL + new_doc.pdf_file.name
command = 'pdftk '+url+" dump_data_fields" 

问题是我必须使用new_doc.savebefore pdftk

有没有办法pdftk在不保存的情况下处理文件?

4

2 回答 2

2

使用subprocess.Popen()withsubprocess.PIPE作为stdinandstdout参数。因为pdftk可以从stdin您那里获取输入,然后可以直接将文件“写入”pdftk而不是文件系统:

import subprocess

command = ['pdftk', '-', 'dump_data_fields']
p = subprocess.Popen(command, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
output, errorout = p.communicate(input=new_doc_data)

Popen.communicate()方法返回stdoutstderr结果。

请注意,input参数 to.communicate()必须是字符串。如果new_doc是某种文件对象,则必须传入new_doc.read()或类似的结果;在上面的示例中,我使用变量名称new_doc_data来指示您将数据new_doc作为字符串传递,因为我不知道您可以在这些对象上使用什么 API。

于 2012-11-27T09:36:26.913 回答
-1

最好的选择是使用 StringIO

我假设在某些时候 new_doc 来自模板并且它是某种文本。在这种情况下,你可以做这样的事情。

from StringIO import StringIO
new_doc = 'foobar'
doc = StringIO(new_doc)
doc.seek(0)
doc.read()

输出将是“foobar”

第一行 import StringIO(对于更快的版本,请执行 From cStringIO import StringIO)。然后我们创建一个字符串并用它实例化一个 StringIO 对象。从那里它几乎就像一个

于 2012-11-27T09:26:17.747 回答