- - PR -
クリスタルレポートをPDFに変換して表示する
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-03-09 11:27
sayurinです。
VS.NET2005で開発しています。 やりたいことは、クリスタルレポートをロードしてPDFに変換して表示することです。 過去ログを参考にして書いてみたところ、表示しても真っ白でした。 まずは、クリスタルレポートがちゃんと設定できているかの確認で、 CrystalReportViewerを使用して表示してみたところ、データセットが 設定できていないように思えました。(詳細セクションが表示されない) そもそも、データセットの設定に誤りがあるのか、クリスタルレポートの 作成方法に誤りがあるのか、よくわからない状態です。 ・データセットは、枠だけを作成しました。 ・データセットをクリスタルレポートに設定するため、データベースエキスパートから「接続の新規作成」-「データベースファイルの検索」より、作成したデータセットを指定しました。 表示するためのソースです。 ReportDocument RPD = new ReportDocument(); RPD.Load(sFileNm); RPD.Database.Tables[0].SetDataSource(ds); CrystalReportViewer1.ReportSource = RPD; ※「ds」は、レコードを取得できています。 カラム名、順序は、枠だけのデータセットを合わせています。 →これはどこまで合わせる必要があるのかわかっていません。 PDFに変換するソースです。 byte[] b; ReportDocument RPD = new ReportDocument(); RPD.Load(sFileNm); RPD.Database.Tables[0].SetDataSource(ds); RPD.ExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat; RPD.ExportOptions.FormatOptions = new PdfRtfWordFormatOptions(); ExportRequestContext ERC = new ExportRequestContext(); ERC.ExportInfo = RPD.ExportOptions; Stream ST = RPD.FormatEngine.ExportToStream(ERC); b = new byte[ST.Length]; ST.Read(b, 0, (int)ST.Length); Response.ContentType = "Application/pdf"; Response.BinaryWrite(b); Response.End(); 1.データセットの設定は正しいのでしょうか。 2.PDFの変換は2005だと違うのでしょうか。 以上、よろしくお願いします。 | ||||||||||||||||
|
投稿日時: 2006-03-09 12:15
(思えました...?) だとしたら、件名が不適切かもしれませんね。 PDF 変換以前で詰まってるのであって、PDF 変換の実装は正しいかもしれませんから。
スキーマのことかな。
これは、
で良いのでは? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 2006-03-09 12:31
データセットをXMLスキーマに変更し、データセットを設定するコードを
RPD.SetDataSource(ds); に書き換えたところ、正しく表示することができました。 よって、件名のとおり、PDFに変換する処理ですが、 やはり、真っ白のままになります。 | ||||||||||||||||
|
投稿日時: 2006-03-09 12:42
おお、とりあえずこっちは解決ですね。
PDF に変換する側のソースでも、
ここの修正が必要なのでは? 一応全部ソースを検証したのですが、間違いが他に見当たらなかったです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 2006-03-09 12:49
RPD.Database.Tables[0].SetDataSource(ds);
は RPD.SetDataSource(ds); に修正しましたが、状況は変わりません。 | ||||||||||||||||
|
投稿日時: 2006-03-09 13:02
うーん、できそうなんだけどなぁ。 単純に ds の中身が本当にあるのかが気になります。 byte[] b の中身は確認されましたか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 2006-03-09 13:05
dsの中身は、デバック中とCrystalReportViewerに表示された内容で確認しました。
byte[] bの中身は、数字が入っていましたが、正しいかの判断の方法がわかりません。 また、線やボックスさえも表示されないので、ds以前の問題かもしれません。 | ||||||||||||||||
|
投稿日時: 2006-03-09 20:23
Page_LoadでやろうとしていたのをButton1_Clickに処理をうつしてみたらできました。
Page_Loadでなぜできないのかがわかりません。 |