Wie zeige ich ein PDF mit PdfSharp in ASP.Net MVC an?

Wir erstellen eine ASP.Net MVC-App, die in der Lage sein muss, ein PDF zu generieren und auf dem Bildschirm anzuzeigen oder es an einem für den Benutzer leicht zugänglichen Ort zu speichern. Wir verwenden PdfSharp, um das Dokument zu generieren. Wie kann der Benutzer das Dokument speichern oder in einem Reader öffnen, wenn es fertig ist? Ich bin besonders verwirrt, weil das PDF serverseitig generiert wird, aber wir möchten, dass es clientseitig angezeigt wird.

Hier ist der MVC-Controller, um den Bericht zu erstellen, den wir bisher geschrieben haben:

public class ReportController : ApiController
{
    private static readonly string filename = "report.pdf";

    [HttpGet]
    public void GenerateReport()
    {
        ReportPdfInput input = new ReportPdfInput()
        {
            //Empty for now
        };

        var manager = new ReportPdfManagerFactory().GetReportPdfManager();
        var documentRenderer = manager.GenerateReport(input);
        documentRenderer.PdfDocument.Save(filename); //Returns a PdfDocumentRenderer
        Process.Start(filename);
    }
}

Wenn dies läuft, bekomme ich eineUnauthorizedAccessException beimdocumentRenderer.PdfDocument.Save(filename); das sagt,Access to the path 'C:\Program Files (x86)\Common Files\Microsoft Shared\DevServer\10.0\report.pdf' is denied. Ich bin mir auch nicht sicher, was bei der Leitung passieren wirdProcess.Start(filename); ausgeführt wird.

Dies ist der Code inmanager.GenerateReport(input):

public class ReportPdfManager : IReportPdfManager
{
    public PdfDocumentRenderer GenerateReport(ReportPdfInput input)
    {
        var document = CreateDocument(input);
        var renderer = new PdfDocumentRenderer(true, PdfSharp.Pdf.PdfFontEmbedding.Always);
        renderer.Document = document;
        renderer.RenderDocument();

        return renderer;
    }

    private Document CreateDocument(ReportPdfInput input)
    {
        //Put content into the document
    }
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage