pdftkPDFファイルの処理に使用しています。
new_doc.save()
url = "/docs/" +settings.MEDIA_URL + new_doc.pdf_file.name
command = 'pdftk '+url+" dump_data_fields"
問題は、new_doc.save前に使用する必要があることpdftkです。
pdftkファイルを保存せずに処理する方法はありますか?
および引数として使用subprocess.Popen()します。入力を受け取ることができるため、ファイルシステムではなく、ファイルを直接「書き込む」ことができます。subprocess.PIPEstdinstdoutpdftkstdinpdftk
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()メソッドstdoutはと結果の両方を返しますstderr。
inputへの引数.communicate()は文字列である必要があることに注意してください。new_docが何らかの種類のファイル オブジェクトである場合は、または同様の結果を渡す必要がありますnew_doc.read()。上記の例では、変数名new_doc_dataを使用して、データを文字列として渡すことを示していnew_docます。これらのオブジェクトで使用できる API がわからないからです。
あなたの最善の策は StringIO を使用することです
ある時点で new_doc はテンプレートからのものであり、それは何らかのテキストであると想定しています。この場合、このようなことができます。
from StringIO import StringIO
new_doc = 'foobar'
doc = StringIO(new_doc)
doc.seek(0)
doc.read()
出力は「foobar」になります
最初の行は StringIO をインポートします (より高速なバージョンの場合は From cStringIO import StringIO を実行します)。次に、文字列を作成し、それを使用して StringIO オブジェクトをインスタンス化します。そこからは、