0

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ファイルを保存せずに処理する方法はありますか?

4

2 に答える 2

2

および引数として使用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 がわからないからです。

于 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」になります

最初の行は StringIO をインポートします (より高速なバージョンの場合は From cStringIO import StringIO を実行します)。次に、文字列を作成し、それを使用して StringIO オブジェクトをインスタンス化します。そこからは、

于 2012-11-27T09:26:17.747 に答える