2

GAE データストアから数メガバイト (生のテキスト文字列) を読み取り、それらをすべて新しい PDF ファイルに書き込み、ユーザーが PDF ファイルをダウンロードできるようにする必要があります。

ファイル システムへの書き込みを妨げるサンドボックスの制限についてはよく理解しています。PDFをメモリ内(またはメモリとブロブストアの組み合わせ)で作成し、それを何らかの方法で保存して、クライアント側(ブラウザ)が実際にファイルとしてプルダウンして保存できるようにする巧妙な方法があるかどうか疑問に思っていますそれをローカルに。

これはおそらく非常に大きなストレッチですが、私の唯一の他のオプションは、このタスクを非GAEサーバーにファームアウトすることです. 前もって感謝します。

4

3 に答える 3

3

GAE 自体を使用してユース ケースを確実に実現できます。高レベルで実行する必要がある手順は次のとおりです。

  1. PDF を操作するための Java ライブラリである優れたiText ライブラリをダウンロードします。まず、Java コードをビルドして PDF コンテンツを生成します。http://itextpdf.com/book/toc.phpでさまざまな例を確認してください。

  2. ファイルに直接書き込むことはできないため、PDF コンテンツをバイト単位で生成してから、ダウンロード サーブレットとして機能するサーブレットを作成する必要があります。サーブレットは、Response オブジェクトを使用してストリームを開き、Mime ヘッダー (ファイル名、ファイルタイプ) を操作して、PDF コンテンツをストリームに書き込みます。これを行うと、ブラウザーは自動的にダウンロード オプションを表示します。

  3. ダウンロード サーブレットには、次のような高レベルのコードが含まれます。

    public class DownloadPDF extends HttpServlet {
    
    public void doGet(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {
    
            //Extract some request parameters, fetch your data and generate your document
    
            String fileName = "<SomeFileName>.pdf";
            res.setContentType("application/pdf");
            res.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\"");
            writePDF(<SomeObjectData>, res.getOutputStream());
        }
    }
    

    }

  4. 上記の writePDF メソッドは独自のメソッドであり、iText ライブラリ Document およびその他のクラスを使用してデータを生成し、2 番目のパラメーターで渡した出力ストリームに書き込むことを忘れないでください。

于 2013-02-21T05:01:24.070 に答える
2

私は Google App Engine での PDF 生成、特に Java での PDF 生成については認識していませんが、一度取得すると、それを保存して後で提供することができます。

PDF の生成には 30 秒以上かかると思われるため、このプロセスにはTask Queue Java APIの使用を検討する必要があります。

ファイルをメモリに保存したら、それを Blobstore に書き込むだけで、後で通常の BLOB として提供できます。概要では、Google App Engine でバイナリ データ (ブロブ) をアップロード、書き込み、提供する方法について、完全に機能する例を示します。

于 2013-02-21T08:57:54.200 に答える
0

グーグルでいくつかの解決策を見つけました。これらのライブラリを実際に試したことはありませんが、役立つことを願っています。

于 2013-02-21T01:11:50.383 に答える