Wie kann ich die Anzeige einer PDF-Datei mit der PdfSharp in ASP.Net MVC?
Machen wir einen ASP.Net MVC-app muss in der Lage sein zum generieren eines PDF-und Sie auf dem Bildschirm anzuzeigen oder speichern Sie es irgendwo leicht für den Benutzer zugänglich. Wir sind mit PdfSharp um das Dokument zu erstellen. Sobald es fertig ist, wie tun wir, damit der Benutzer das Dokument speichern oder öffnen Sie es in einem reader? Ich bin vor allem verwirrt, weil sich das PDF-Dokument auf der Serverseite generiert, aber wir wollen es zu zeigen, bis auf client-Seite.
Ist hier das MVC-controller zu erstellen, der Bericht, 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 diese läuft, bekomme ich eine UnauthorizedAccessException
bei documentRenderer.PdfDocument.Save(filename);
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 passieren wird, wenn die Linie Process.Start(filename);
ausgeführt wird.
Dies ist der code in manager.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
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin nicht vertraut mit PDF-scharf, aber für MVC geschieht meist über eingebaute Funktionalität. Sie benötigen, um Ihr pdf-Dokument dargestellt als ein array von bytes. Dann würden Sie einfach verwenden MVC-Datei Methode um Sie wieder in den browser und lassen Sie es handhaben die download. Gibt es Methoden, die auf Ihre Klasse zu tun?
Verwendung von Yarx Vorschlag und PDFsharp Team ' s tutorial, dies ist der code, den wir am Ende mit:
Controller:
ReportPdfManager:
document.Save(stream, false)
nimmt der parameterfalse
zu zeigen, dassstream
sollte nicht geschlossen werden, als ein side-effect der aufrufendenSave
. Dieses Verhalten ist notwendig, damit wir anrufen könnenstream.ToArray
in der nächsten Zeile, und so, dass dieusing
block verwendeten wir können so arbeiten, als erwartet.