0

私が到達しようとしている目的は、PDF を Oracle データベースに BLOB に保存することです。現在、私が使用しているサーブレットは、HttpServletResponse 経由でのみ pdf を送り返します。

Printers.getPDFPrinter(0).printToResponse(myTemplate, response, 0, TemplateA.PDF);

printToResponse スクリプトにアクセスできないため、何をするのかわかりません。私が知っているのは、応答には OutputStream を取得できる HttpServletResponse タイプがあり、myTemplate は私がアクセスしていない IDocument インターフェイスを実装していることだけです。

myTemplate または response のいずれかを (blob として保存するために) バイト配列に入れることができれば、問題ありません。ただし、すべての検索で、出力ストリームではなく、入力ストリームからバイト配列を作成するコードしか見つかりませんでした。

誰でも助けてくれますか?

4

2 に答える 2

1

そのコードにはおそらく完全な HttpResponse が必要です。これは、コンテンツ タイプとその他のビットも設定する必要があるためです。ひどく聞こえるかもしれませんが、「モック」応答オブジェクトを作成し、関連するメソッドをオーバーライドして、出力ストリームへの書き込みをインターセプトすることができます。PDFWriter に ByteArrayOutputStream を提供すると、byte[] を取得して DB に書き込むことができます。

于 2012-12-31T15:35:24.650 に答える
0

サーブレットがアクセスに使用するライブラリはわかりませんPrinters.getPDFPrinter(0)が、

  • printToResponseライブラリは( printToStreamprintToFile、 ...?)以外のメソッドを提供する場合があります。
  • HttpServletResponseにダミーのServletOutputStreamを返す独自のものを渡すことができますgetOutputStream()。このダミー サブクラスは、 Blob.setBinaryStream(1)の結果に委譲することにより、write(int b)を実装する必要があります。

独自のHttpServletResponseを作成する場合は、元のストリームと Blob ストリームを委任するために必要なHttpServletResponseWrapperPDF をサーブレットが返す必要がある場合は、から継承することをお勧めします。ServletOutputStream

後でデータベースから PDF を取得するために id を返すようにサーブレットを操作する場合は、独自の を実装する必要がありますHttpServletResponse。この場合、 aProxyInvocationHandlerhandlesを使用しますgetOutputStream()

于 2012-12-31T15:54:01.177 に答える