我正在使用pdftk处理PDF文件。
new_doc.save()
url = "/docs/" +settings.MEDIA_URL + new_doc.pdf_file.name
command = 'pdftk '+url+" dump_data_fields" 问题是我必须在使用pdftk之前使用new_doc.save。
有没有办法让pdftk在不保存文件的情况下处理它?
发布于 2012-11-27 17:36:27
使用带有subprocess.PIPE的subprocess.Popen()作为stdin和stdout参数。因为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() method同时返回stdout和stderr结果。
注意,.communicate()的input参数需要是一个字符串。如果new_doc是某种文件对象,则必须传入new_doc.read()或类似的结果;在上面的示例中,我使用了变量名new_doc_data来指示将来自new_doc的数据作为字符串传递,因为我不知道可以对这些对象使用什么API。
发布于 2012-11-27 17:26:18
您最好的选择是使用StringIO
我假设在某种程度上new_doc来自一个模板,它是某种类型的文本。在这种情况下,您可以这样做。
from StringIO import StringIO
new_doc = 'foobar'
doc = StringIO(new_doc)
doc.seek(0)
doc.read()输出将是'foobar‘
第一行导入StringIO (对于速度更快的版本,请从cStringIO导入StringIO)。然后我们创建一个字符串,并用它实例化一个StringIO对象。从那里看,它很像一个
https://stackoverflow.com/questions/13579708
复制相似问题