2

内部 Web サービスを使用して reportlab を使用して一部のデータを PDF ファイルに変換する Pyramid Web アプリケーションがあります。これはうまく機能しますが、一度に生成される PDF ファイルは 1 つだけです。クライアントは、複数の PDF ファイルを印刷できるようにしたいと考えています(プリンターで実際に印刷するのではなく、圧縮することができます)。

私は現在、このコードを一番下に持っています:

    result = {"sales_order_data": {"sales_order_list": order_pdf_data}}
    encoded_result = urllib.urlencode(result)
    received_data = requests.post('http://convert_to_pdf/sales_order', data=encoded_result)
    pdf_file = received_data.content
    content_disposition = received_data.headers['Content-Disposition']

    res = Response(content_type='application/pdf', content_disposition=content_disposition)
    res.body = pdf_file
    return res

pdf_file は PDF ファイルのバイナリ形式です。私は、pdf 変換コードを複数回実行し、そのたびに pdf バイナリ データを並べ替えのリストに格納し、StringIO と ZipFile を使用して一連のファイルを圧縮することを考えていました。

これが可能かどうかはよくわかりません:

list_of_pdf_files = []
for order in list_of_orders:
    <processing of data here>
    result = {"sales_order_data": {"sales_order_list": order_pdf_data}}
    encoded_result = urllib.urlencode(result)
    received_data = requests.post('http://convert_to_pdf/sales_order', data=encoded_result)
    pdf_file = received_data.content
    list_of_pdf_files.append(pdf_file)

zipped_file = <What do I do here to zip the list of pdf files?>   
content_disposition = 'attachment; filename="pdf.zip"'
res = Response(content_type='application/zip', content_disposition=content_disposition)
res.body = zipped_file
return res

バイナリ pdf ファイルのリストを取得した後、メモリ内で圧縮されたファイルを生成し、そのファイルを content-disposition を介して応答として返すことができるようにするにはどうすればよいですか?

4

1 に答える 1

1

ZipFile.writestr()PDFファイルを一度に1つずつアーカイブに書き込むために使用します。

于 2012-07-16T13:22:43.313 に答える