web-dev-qa-db-ja.com

ASP.NET CoreおよびAngular(> 2.0)用のRDLCローカルレポートビューアー

Asp.netコアWebページにRDLC Local ReportViewerコントロールを表示する方法はありますか?

ReportViewerを表示するには、従来のWebFormsアプリケーションで、以下のコードが機能します。

<body>
    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>

        <div style="height: 600px;">
            <rsweb:ReportViewer ID="reportViewer" runat="server" Width="100%" Height="100%"></rsweb:ReportViewer>
        </div>
    </form>
</body>

私はすでに以下のコンポーネントを試し、テストしました。結果を以下に示します。

  1. ReportViewerForMvc -MVCで動作しますが、ASPNET Coreとの互換性はありません。
  2. MvcReportViewer -MVCで動作しますが、ASPNET Coreとの互換性はありません(この問題を参照: https://github.com/ilich/MvcReportViewer/issues/121 )。
  3. MvcReportViewer -Microsoftビューアーコントロールを使用しないため、aspnetコアをサポートしますが、ローカルレポートでは機能しません(レポートサーバーのURLが必要)。
  4. ngx-ssrs-reportviewer npm package-リモートレポートのラッパーは、ローカルレポートをサポートしていません。(レポートサーバーのURLが必要です)

Q1。 asp.netコアアプリケーションで<rsweb:ReportViewer>を使用する最良の方法は何ですか?

10
int-i

Npmパッケージng2-pdfjs-viewerが見つかりましたが、PDFJSを使用する意思がある場合、MSレポートビューアーではありません。パッケージには、pdfおよびng2-pdfjs-viewerを生成するためにLocalReportビューアーを使用してブラウザーで表示するための同様の行の例があります ---(https://www.npmjs.com/package/ng2-pdfjs-viewer =)

<!-- your.component.html -->
<button (click)="openPdf();">Open Pdf</button>
<!-- your.component.ts-->
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 openPdf() {
    let url = "http://localhost:4200/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")
}
2
James

Microsoftは、RDLCレポートビューアーをaspnetコアに実装または導入していません。代わりに、彼らは製品を購入してその隙間を埋めています。

ニュースへの完全なリンク- https://blogs.msdn.Microsoft.com/sqlrsteamblog/2018/04/02/Microsoft-acquires-report-rendering-technology-from-forerunner-software/

元の問題へのリンク- https://github.com/aspnet/Home/issues/1528

ここに本質があります。 「MicrosoftはForerunner Softwareからレポートレンダリングテクノロジーを買収

Reporting Servicesへの投資を加速するために、Forerunner Softwareからテクノロジーを取得したことをお知らせいたします。このテクノロジーには、とりわけ、Reporting Services(* .rdl)レポートのクライアント側レンダリング、レポートを表示するためのレスポンシブUIウィジェット、および他のアプリにレポートを統合するためのJavaScript SDKが含まれます。オープンプラットフォーム。

これはあなたにとって素晴らしいニュースです。私たちはあなたから聞いたフィードバックの複数のポイントにこの技術を適用する機会があると考えています。

SSRSレポートを実行できるクラウドサービスとしてのソフトウェア(SaaS)またはプラットフォームとしてのサービス(PaaS)を探しています。 Springの18リリースノートでお気づきかもしれませんが、私たちはSSRSレポートをPower BIクラウドサービスに積極的に取り込むことに取り組んでおり、それを可能にするためにクライアント側のレンダリングを構築しています。おそらくPower BIアプリを使用して、携帯電話でSSRSレポートを表示します。このテクノロジーは、レポートパラメーター値の提供、レポート内のナビゲート、さらにはレポートコンテンツの表示など、より優れた応答性の高いUIの提供に役立つと考えています。

レポートビューアーコントロールは大好きですが、ASP.NET Webフォームコントロールです。 ASP.NET Core/MVCアプリまたは非ASP.NETアプリに統合できるものが必要です。このテクノロジーを使用して、最新のアプリに統合できるクライアント側/ JavaScriptベースのレポートビューアーを提供したいと考えています。

これらは大規模な取り組みであり、共有する時間枠はまだありませんが、今後数か月間は常に進捗を共有し、できるだけ早く頻繁にフィードバックを聞くよう努めています。

Forerunner Softwareは、既存のお客様を限られた期間サポートし続けます。」

7
int-i

質問がASP.NET CoreプロジェクトでMicrosoft Reportviewerを使用する方法である場合、実装の詳細に関係なく、私の解決策は実際のreportviewerコントロールをバイパスし、レポートをPDFまたはExcelに直接レンダリングすることです。 .net Core 1.1では、使用するNuGetパッケージは Microsoft.ReportViewer.2012.Runtime by Fornax です。

using System.IO;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Reporting.WebForms;

namespace WebApplication3.Controllers
{
    public class ReportController : Controller
    {
        private readonly IHostingEnvironment environment = null;
        public ReportController(IHostingEnvironment environment)
        {
            this.environment = environment;
        }
        public IActionResult Report()
        {
            string mimeType;
            string encoding;
            string filenameExtension;
            string[] streams;
            Warning[] warnings;
            var rv = new ReportViewer();
            rv.ProcessingMode = ProcessingMode.Local;
            rv.LocalReport.ReportPath = Path.Combine(environment.ContentRootPath, "Reports", "Report1.rdlc");
            rv.LocalReport.Refresh();
            var bytes = rv.LocalReport.Render("PDF", null, out mimeType, out encoding, out filenameExtension, out streams, out warnings);
            return File(bytes, mimeType);
        }
    }
}
5
lienn

Jameのソリューションが機能するためには、完全な.NET Frameworkを参照する必要があります。これはすべてASP.NET Core 1および2に適していますが、今では誰もが気づいているはずです-ASP .NET 3は[〜#〜] not [ 〜#〜]完全な.NET Frameworkを参照できます。

現在、.NET CoreではSSRSホストサーバーレポート(RDL)レポートのみを使用できます。クライアント[〜#〜] rdlc [〜#〜]レポートの場合、現在は有料のSyncfusionソリューションのみが機能します(トレイルバージョンをテストしました)

JamesソリューションはASP.NET Core 3では完全に無効になります(これも.NET Frameworkではなく.NET Coreのみを参照できます)。

3
Muaddib878