2016-02-19 3 views
8

私はMVC5 Webアプリケーションを使用しており、データベーステーブルからレポートを生成する必要があります。ユーザーは印刷するテーブルを選択し、レポートに含める列を選択するだけで、システムはデータとともにグリッド(テーブル)を表示するだけです。ASP.Netの動的な表形式のデータレポート

HTMLテーブルにデータを表示することはもちろん問題ではなく、ユーザーがダウンロードできるデータでExcelファイルを生成することもできました。

しかし、私はまた、PDFなどの印刷可能な形式のレポートや、MS Officeなどの特別なソフトウェアを必要としないその他の形式を提供する必要があります。

最初はReportViewerコントロールにする必要があると思っていましたが、ユーザーが必要な列を選択してからレポートが動的であるという問題がありました。私は、他の人がレポート定義ファイルを生成しようとしているのを見たことがありますが、私はそれほど醜いものは望んでいませんでした。

セルのサイズをうまく計算し、そこからPDFを作成するHTMLテーブルを取る方法はありますか?列が多すぎると複数のページでレポートを横に分割することはもちろんありません。

+1

、私はあなたがiTextののXMLWorkerを見てみましょうことを示唆しています。例はJavaで書かれていますが、C#では十分に明白でなければなりません。 iTextSharpは、iTextの.NETポートです。開示:私はiTextソフトウェアで働いています。 –

+0

興味深い。私は何とか水平フィッティングを扱うことができますか?つまり、1ページに収まるコラムが多すぎる場合は、次のページに移動できますか? – kagelos

+0

@kagelos私はあなたが欲しいと思っているが、jqueryが必要なソリューションを持っています。だから私はjqueryを使用して、あなたに解決策を与えることができますか? –

答えて

2

Spartacusを試すことができます。

これはC#で書かれた比較的新しい.NETライブラリです。これは、さまざまなデータベースに接続し、ExcelおよびPDFでレポートを生成することができます。

私はGoogleドライブ内の3つのファイルアップロード:スパルタカスを使用するためには

を、あなたはSystem.DataとSystem.Xmlのを参照する必要がパッケージ、およびSpartacus.dllが含まれます。あなたがSpartacus.Databaseオブジェクトを使用する必要はありません

Spartacus.Database.Generic v_database; 
Spartacus.Reporting.Report v_report; 
System.Data.DataTable v_table; 

v_database = new Spartacus.Database.Postgresql("127.0.0.1", "database", "postgres", "password"); 

v_table = v_database.Query(
    "select 'Example of Report made with Spartacus' as title, " + 
    "  product, " + 
    "  description, " + 
    "  unit, " + 
    "  quantity, " + 
    "  total_cost, " + 
    "  unit_cost " + 
    "from table", "REPORT"); 

v_report = new Spartacus.Reporting.Report(1, "template.xml", v_table); 
v_report.Execute(); 
v_report.Save("report.pdf"); 

注:次の例では

は、私は簡単な手順でtemplate.xmlからreport.pdfを作成しました。他の方法でSystem.Data.DataTableを取得できる場合は、そのオブジェクトをReportオブジェクトに渡すことができます。

しかし、キャッチがあります。あなたはXMLテンプレートで見ることができるように、各列のために、あなたが知っておく必要があります。

  • 列名(明らかに)
  • タイトル
  • 合わせ(LEFT、RIGHTまたはCENTER)
  • 塗りつぶし(パーセント、100)余白のページマイナス幅の合計幅であること
  • タイプ(INTEGER、REAL、BOOLEAN、CHAR、DATEまたはSTRING)

フィルとタイプが不可欠であり、あなたがミリアンペアすべての列についての情報を保持する必要があります。 これを達成するのはあまりにも難しいですし、あなただけの列名とタイプを得ることができる場合、あなたは次のようなタイプだけに基づいてaproximation、計算することができます:

  • 製品はString型である、デフォルトの塗りつぶし= 30
  • 説明は、デフォルトフィル= 30
  • ユニットデフォルトフィル= 30
  • は、String型である、String型でありますすべてのデフォルトの塗りつぶしのタイプREALの、デフォルトの塗りつぶし= 15
  • TOTAL_COSTは、実数型で、デフォルトの塗りつぶし UNIT_COST = 15
  • は、実数型で、デフォルトの塗りつぶし= 15

合計

  • 列の塗りつぶし=列のデフォルトの塗りつぶし*(デフォルトの塗りつぶし/ 100の合計)は、30 + 30 + 30 + 15 + 15 + 15 =

その後、あなたは、動的なフィールド情報を持つダイナミックtemplate.xmlファイルを生成する必要があります。

免責事項:私はSpartacusの作成者で、メンテナーです。 http://developers.itextpdf.com/examples/xml-worker/html-tables:あなたはすでにHTMLを持っているので

+0

非常にいいね。しかし、列が1ページに水平に収まらないケースはどうすれば処理できますか? – kagelos

+0

@kagelos Spartacusは許可していません。列の幅の合計が30%であることを指定した場合、列の幅の合計は常に30%になります。コンテンツがこのスペースに収まらない場合、Spartacusはコンテンツを動的に切り詰めます。 – wind39

0

SSRSではページ番号の自動処理がサポートされていますが、そのルールは重要です。あなたが1ページ幅広にレポートを設計し、それが複数のページにレンダリングされている場合

Understanding Pagination in Reporting Services (Report Builder 3.0 and SSRS)

、余白を含むレポート本体の幅は、物理ページサイズよりも大きくないことを確認してください幅。空のページがレポートに追加されないようにするには、コンテナのコー​​ナーを左にドラッグしてコンテナのサイズを小さくします。

+0

私はレポートの列を動的に追加/削除されていることである質問、の最も重要な部分を逃したと考えています。静的なレポートだった場合、またはHTMLをPDFに変換するだけで興味があった場合は、まず質問をしません。私はプログラムで複数のページに横方向にレポートを分割できるソリューションを探しています。 – kagelos

+0

IMHO SSRSはこれをサポートしていますが、あなたは物事の音に敏感ではありませんでした。 –

+0

@JeremyThompson列を動的に追加するSSRSでレポートをプログラムで作成するにはどうすればよいですか?私が私の質問で言及したように、私が今まで見た解決策は、(醜い)テキスト/コードを印刷して定義ファイルを作成しようとしています。私はこれを避けたいと思います。 – kagelos

関連する問題