12

100 ページ以上の PDF ドキュメントを生成する必要があります。このプロセスでは処理に大量のデータが必要であり、一度に生成すると、より多くの時間とメモリが必要になります。

私は自分のやり方をハックするためにいくつかの異なる方法を試しました:

さまざまな結果で動作しましたが、遅く、必要以上に多くのメモリを必要とします (インスタンスのソフトメモリ制限に達することがあります)。現在、ブロブストアにそれぞれを格納するさまざまなタスクでいくつかのセクションを生成し、それらを pyPdf とマージしますが、大きなドキュメントではチョークします。

私が生成しているドキュメントはそれほど複雑ではなく、ほとんどが表とテキストであり、内部参照も TOC も、ドキュメントの残りの部分を認識する必要のあるものも何もありません。私はレイアウトのためにカモノハシと一緒に暮らすことができ、派手なドキュメントの外観や HTML2PDF 変換は必要ありません。

目標は、データストアが許す限り速くドキュメントを生成することです。並列ページ生成は便利ですが、必須ではありません。

各タスクが単一のページを生成し、最後のタスクがブロブストアファイルをファイナライズして読み取り可能にする、blobstore files apiを使用したページごとの生成を考えていました。しかし、生成を一時停止し、部分的なPDFをストリームに保存し、そのストリームで生成を再開して、別のタスクで次のページを生成する方法を見つけることができないようです。

だから私の質問は:

GAE では、数ページよりも大きな PDF ドキュメントを生成し、生成をタスク リクエスト間で分割し、結果のドキュメントをブロブストアに保存する方法を教えてください。

reportlab で世代分割ができない場合、GAE タスク要求によって設定された制限に適合するように、異なる PDF ドキュメントをマージするフットプリントを最小限に抑えるにはどうすればよいですか?

更新: Conversion API の代替案は大歓迎です。

2nd UPDATE 変換 API は廃止されているため、現在それはオプションではありません。

3 回目 の更新 Pileline または MapReduce API はここで役立ちますか?

4

2 に答える 2

1

アプリ エンジンに wkhtmltopdf をインストールすることをお勧めします。Wkhtmltopdf は、html を pdf にレンダリングするコマンド ライン ツールです。

html ファイルを作成し、wkhtmltopdf を使用して 1 つずつ pdf に変換します。

Windows で使用できます (Linux ベースのシステムでは似たようなものです):

def create_pdf(in_html_file=None, out_pdf_file=None, quality=None):
    pathtowk = 'C:/wkhtmltopdf/bin/wkhtmltopdf.exe {0} {1} {2}'    

    if quality == 1: # super quality no compression
        args_str = '--encoding utf-8 --disable-smart-shrinking --no-pdf-compression --page-size A4 --zoom 1 -q -T 15.24mm -L 25.4mm -B 20.32mm  -R 33.02mm'
    elif quality == 2: # moderate quality some compression
        args_str = '--encoding utf-8 --disable-smart-shrinking --page-size A4 --zoom 1 -q -T 15.24mm -L 25.4mm -B 20.32mm  -R 33.02mm'
    else: # poor quality max compression
        args_str = '--encoding utf-8 --page-size A4 --zoom 1 -q -T 15.24mm -L 25.4mm -B 20.32mm  -R 33.02mm'

    os.system(pathtowk.format(args_str, in_html_file, out_pdf_file))

あるいは、subprocess.call(pathtowk.format(args_str, in_html_file, out_pdf_file))wkhtmltopdf を実行するために使用することもできます (私の意見では、そのほうがよいでしょう)。

変換プロセスが完了したら、生成された PDF を単一のファイルにマージするために PyPdf2 を使用します。

于 2015-05-08T07:57:23.403 に答える
1

新しい Conversion API をご覧ください: https://developers.google.com/appengine/docs/python/conversion/overview

于 2012-04-22T15:32:56.303 に答える