stiamo realizzando un'app MV.NET ASP.Net che deve essere in grado di generare un PDF e visualizzarlo sullo schermo o salvarlo in un luogo facilmente accessibile all'utente. Stiamo usando PdfSharp per generare il documento. Una volta finito, come possiamo consentire all'utente di salvare il documento o aprirlo in un lettore? Sono particolarmente confuso perché il PDF è generato lato server ma lo vogliamo mostrare sul lato client.Come faccio a visualizzare un PDF utilizzando PdfSharp in ASP.Net MVC?
Ecco il controller MVC per creare il rapporto che abbiamo scritto finora:
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);
}
}
Quando questo viene eseguito, ottengo un UnauthorizedAccessException
a documentRenderer.PdfDocument.Save(filename);
che dice, Access to the path 'C:\Program Files (x86)\Common Files\Microsoft Shared\DevServer\10.0\report.pdf' is denied.
Sono, inoltre, non sicuro cosa accadrà quando viene eseguita la riga Process.Start(filename);
.
Questo è il codice 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
}
}
C'è un campione web che mostra come ottenere la matrice di byte e restituirla all'utente senza MVC. Con MVC è necessario solo il codice per ottenere l'array di byte (dal flusso di memoria, nessun file richiesto). Esempio: http://www.pdfsharp.net/wiki/Clock-sample.ashx –
Per i nuovi utenti, diventa un po 'di confusione, quindi (NickAlbrecht) si preoccuperà di aggiornare la risposta per fare la cosa esatta come @PDFsharpTeam aggiunto un link di supporto. [** MemoryStream stream = new MemoryStream(); //// document.Save (stream, false); //// Byte [] documentBytes = stream.ToArray(); //// return File (documentBytes, "application/pdf"); **] (Mi ha aiutato molto. Grazie !!!) –