web-dev-qa-db-ja.com

ASP .NET Coreを使用した.rdlcレポートのレンダリング

ASP.NET Coreで.rdlcレポートをレンダリングすることは可能ですか?現在、これは、.NET Coreではなく.NET Frameworkをターゲットにしている場合にのみ可能であるようです。

レポートビューアは必要ありません。.rdlcレポートの結果をバイト配列としてレンダリングする必要があるだけです。

4
Muaddib878

現在クライアントRDLCレポートを.NETコア(完全な.NET Frameworkなし)でレンダリングする唯一の方法は、有料のSyncfusionソリューションを使用することです。私は試用版をテストしましたが、うまくいきます。 ASP .NET Core(サードパーティツールなし))でサーバーホストのRDLレポートをレンダリングすることも可能です。ただし、多くのRDLCレポートをRDLに移行する必要があるため、理想的ではありません– Muaddib878 2分前に編集

1
Muaddib878

Rdlcをバイト配列にレンダリングできます。しばらく前に尋ねた関連する質問をご覧ください。 ASP.NET CoreおよびAngular(> 2.0)のRDLCローカルレポートビューアー

最終的にそのスレッドに関するクリエイティブな議論の結果、angular package( https://www.npmjs.com/package/ng2-pdfjs-viewer -Disclosure; I作成者です)クライアント側に消費可能なrdlcバイト配列機能があります。もちろん、このパッケージの代わりに、バイト配列を表示する別のJavaScriptライブラリを選択することもできます。

angularの簡単な使用法は次のようになります。プレーンなjsまたは別のフレームワークを使用している場合でも、ほとんどのコードは再利用できます。

以下のコードは

1。aspnetコアアクションメソッド(サーバー側)でRDLCレポートビューアーコントロールを使用してバイト配列を吐き出し、httpを使用して有線で送信します。 (コードはC#です)
2。応答のバイト配列をblobオブジェクト(Js)に処理します
3。 blobオブジェクトをng2-pdfjs-viewerにフィードします。
4。 ng2-pdfjs-viewerは、MozillaのPDFJSを内部的に使用して、ブラウザーにPDFを表示するという偉業を達成します。
(FYI .. ng2-pdfjs-viewerパッケージで提供されるサンプルからコードを取得しました。別のライブラリまたはプレーンJavaScriptを使用している場合は、ステップ3と4を置き換えてください)

<!-- your.component.html -->
<button (click)="showPdf();">Show</button>
<div style="width: 800px; height: 400px">
  <ng2-pdfjs-viewer #pdfViewer></ng2-pdfjs-viewer>
</div>

export class MyComponent implements OnInit {
  @ViewChild('pdfViewer') pdfViewer
  ...

  private downloadFile(url: string): any {
    return this.http.get(url, { responseType: ResponseContentType.Blob }).map(
      (res) => {
        return new Blob([res.blob()], { type: "application/pdf" });
      });
  }

  public showPdf() {
    let url = "http://localhost/api/GetMyPdf";
    this.downloadFile(url).subscribe(
    (res) => {
        this.pdfViewer.pdfSrc = res; // <---- pdfSrc can be Blob or Uint8Array
        this.pdfViewer.refresh(); // Ask pdf viewer to load/reresh pdf
      }
    );
  }

[HttpGet]
[Route("MyReport")]
public IActionResult GetReport()
{
   var reportViewer = new ReportViewer {ProcessingMode = ProcessingMode.Local};
   reportViewer.LocalReport.ReportPath = "Reports/MyReport.rdlc";

   reportViewer.LocalReport.DataSources.Add(new ReportDataSource("NameOfDataSource1", reportObjectList1));
   reportViewer.LocalReport.DataSources.Add(new ReportDataSource("NameOfDataSource2", reportObjectList1));

   Warning[] warnings;
   string[] streamids;
   string mimeType;
   string encoding;
   string extension;

   var bytes = reportViewer.LocalReport.Render("application/pdf", null, out mimeType, out encoding, out extension, out streamids, out warnings);

   return File(bytes, "application/pdf")
}
1
int-i

.rdlcをバイト配列として使用して、.NET Coreで.rdlcレポートをレンダリングすることはできません。

0
Artur Mustafin