pdftk
PDFファイルの処理に使用しています。
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.PIPE
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()
メソッド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 オブジェクトをインスタンス化します。そこからは、