@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

WebフォームからPDFの出力

1
投稿者投稿内容
ゆう@日本
会議室デビュー日: 2004/05/31
投稿数: 7
投稿日時: 2006-03-01 22:10
お世話になります。

ASP.net(C#)で開発をしています。
ActiveReports.netを使用して帳票出力プログラムを作成しています。
帳票出力で問題が発生しています。
実現したい事は、PDF形式で帳票を出力、または表示する事です。

参考にしたのは、ActiveReportsのヘルプです。
以下のようなサンプルコードが記載されていました。

DataDynamics.ActiveReports.Export.Pdf.PdfExport p = new DataDynamics.ActiveReports.Export.Pdf.PdfExport();
System.IO.MemoryStream m_stream = new System.IO.MemoryStream();
rptCustEx rpt = new rptCustEx();
rpt.Run();
p.Export(rpt.Document, m_stream);
m_stream.Position = 0;
Response.ContentType = "application/pdf";
Response.BinaryWrite(m_stream.ToArray());
Response.End();

(DBへの接続情報やSQL文は帳票に直指定されています。)

上記のサンプルコードを応用して
下記のようなコードを記述しました。

DataDynamics.ActiveReports.Export.Pdf.PdfExport p = new DataDynamics.ActiveReports.Export.Pdf.PdfExport();
System.IO.MemoryStream m_stream = new System.IO.MemoryStream();
rptSample rpt = new rptSample();

DataTable dt = GetPRTData();
rpt.DataSource = new DataView(dt);
rpt.Run(false);

p.Export(rpt.Document, m_stream);
m_stream.Position = 0;
Response.ContentType = "application/pdf";
Response.BinaryWrite(m_stream.ToArray());
Response.End();

以上のようなロジックを記述しています。
このロジックを実行すると
「指定されたキャストは有効ではありません」
とエラーが発生します。
発生箇所は
p.Export(rpt.Document, m_stream);
です。
(GetPRTDataは印刷データを取得する関数です。)


サンプルコードのまま使用すると、DBサーバの接続情報や
SQL文などが直で指定しなくてはならない為、現実的には不可能な仕様です。

DB接続情報やSQL文をデザイン時に設定するのでは無く、
コードを実行時に設定する方法が分かれば解決します。
もしくは、キャストの問題が分かれば解決します。

非常に理解し難い質問をしてしまいましたが
どなたか、どんな些細な事でも結構ですので
ご教授お願いいたします。
ゆう@日本
会議室デビュー日: 2004/05/31
投稿数: 7
投稿日時: 2006-03-02 14:37
お世話になります。

いろいろと悪戦苦闘の結果、自己解決する事ができました。
以下のように記述しました。


DataDynamics.ActiveReports.DataSources.SqlDBDataSource ds = new DataDynamics.ActiveReports.DataSources.SqlDBDataSource();
ds.ConnectionString = obj.ToString();

ds.SQL = (SQL文);

DataDynamics.ActiveReports.Export.Pdf.PdfExport p = new DataDynamics.ActiveReports.Export.Pdf.PdfExport();
System.IO.MemoryStream m_stream = new System.IO.MemoryStream();
rptSample rpt = new rptSample();

rpt.DataSource = ds;

rpt.Run();

p.Export(rpt.Document, m_stream);
m_stream.Position = 0;
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition","attachment; filename=result.pdf");
Response.BinaryWrite(m_stream.ToArray());
Response.End();

以上です。
また何かありましたら書き込みさせていただきます。
tomi
会議室デビュー日: 2006/02/08
投稿数: 11
投稿日時: 2006-03-02 14:51
レポートにプロパティでも作って値を渡し、
DataInitialize内でDataSourceとDataMemberの設定をすれば良いのではないでしょうか?


1

スキルアップ/キャリアアップ(JOB@IT)