maeda
aaake****@gmail*****
2009年 9月 3日 (木) 15:31:25 JST
maedaです。 矢野様 返信ありがとうございます。 ByteArrayResourceを使用することで無事にPDFを表示することが 出来ました。 ありがとうございました。 Tsutomu Yano <t_yano****@me*****> wrote: > 矢野です。 > > 特に動作確認してないので勘のようなものでもうしわけないのですが... > > stream.toString()でJava文字列に変換するときに、PDF内の文字データが壊れてないでしょうか。 > ByteArrayOutputStream#toStringには、引数にエンコーディング名を取るものもあるのでそれを > 使えばいいようにも見えますが、PDFのエンコーディングの取り扱いは、そう単純でもないみたいですね。 > > 参考: http://www.informe.co.jp/useful/pdf/pdf7.html > > PDFは文字列ではありますが、StringResourceStreamを使うには、PDF文字列をいったんJava文字列 > に変換しないといけないので、エンコーディングではまりそうな気がします。 > > > 今回のケースですと、PDFデータとして完全なバイト配列がすでにあるわけですから、それを > そのままブラウザに返却し、クライアントのPDFリーダに処理を任せるのが良いように思います。 > > WicketのResourceStreamを使いたいのであれば、ByteArrayResourceオブジェクトを生成し、 > getResourceStream()を呼び出すことで簡単にResourceStreamを取得することができます。 > > # 実際、ByteArrayResourceのJavaDocをみると、動的に生成されたPDFデータなんかに > # 使う、と書かれていますし... > > さらに言えば、ResourceLinkとByteArrayResourceを使うと、ResourceStreamを自分で処理することも > なく、ResourceLinkのコンストラクタにByteArrayResourceを渡すだけで、リソースのダウンロード > リンクを作ることもできます。今回はそれが用途なのかどうかはわかりませんが... > > > 以上、ご参考になれば。 > > > > On 2009/09/01, at 20:55, maeda wrote: > > > maedaです。 > > > > StringResourceStreamを使用してのPDF表示について質問なのですが > > > > PDF作成ライブラリを使用して吐き出されたByteArrayOutputStreamでPDF表示を行いたいのですが > > 下記のソースコードを実行すると > > ページ数は正しいのですが白紙のPDFが表示されてしまいます。 > > なにか足りない処理などありますでしょうか? > > > > setCharsetで指定している文字コードはUTF-8です。 > > > > /** > > * > > * 印刷ボタン > > */ > > private SubmitLink printLink = new SubmitLink("printLink") { > > @Override > > public void onSubmit() { > > > > //PDF作成処理 > > ByteArrayOutputStream stream = testService.printLink(); > > > > StringResourceStream rs = null; > > rs = new StringResourceStream(stream.toString(),"application/pdf"); > > rs.setCharset(Charset.forName(getResponse().getCharacterEncoding())); > > getRequestCycle().setRequestTarget(new ResourceStreamRequestTarget(rs)); > > } > > }; > > > > 下記のような感じで > > getResponseしてPDFを出力すると正しく表示されるのでPDFは問題ないと思うのですが・・・。 > > > > /** > > * > > * 印刷ボタン > > */ > > private SubmitLink printLink = new SubmitLink("printLink") { > > @Override > > public void onSubmit() { > > ByteArrayOutputStream stream = testService.printLink(); > > > > // responseを取得 > > WebResponse response = (WebResponse) getResponse(); > > > > // ヘッダー設定 > > response.setContentType("application/pdf"); > > response.setHeader("Content-Disposition", "inline"); > > > > // responseのOutputStreamにPDFのByteArrayOutputStreamをセット > > try { > > OutputStream os = response.getOutputStream(); > > os.write(stream.toByteArray()); > > os.close(); > > > > }catch (Exception e) { > > throw new RuntimeException(e); > > } > > //responseをセット > > setHeaders(response); > > } > > }; > > > > _______________________________________________ > > Wicket-ja-user mailing list > > Wicke****@lists***** > > http://lists.sourceforge.jp/mailman/listinfo/wicket-ja-user > > --------------------------------------------------- > 矢野 勉(やの つとむ) > 電子メール: t_yano****@me***** > --------------------------------------------------- > > _______________________________________________ > Wicket-ja-user mailing list > Wicke****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/wicket-ja-user