tworzymy aplikację ASP.Net MVC, która musi być w stanie wygenerować plik PDF i wyświetlić go na ekranie lub zapisać go w miejscu łatwo dostępnym dla użytkownika. Używamy PdfSharp do wygenerowania dokumentu. Po zakończeniu, w jaki sposób możemy pozwolić użytkownikowi zapisać dokument lub otworzyć go w czytniku? Jestem szczególnie zdezorientowany, ponieważ plik PDF jest generowany po stronie serwera, ale chcemy, aby wyświetlał się po stronie klienta.Jak wyświetlić plik PDF za pomocą PdfSharp w ASP.Net MVC?
Oto kontroler MVC, aby utworzyć raport, który mamy napisane do tej pory:
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);
}
}
Gdy skończy, otrzymuję UnauthorizedAccessException
na documentRenderer.PdfDocument.Save(filename);
który mówi, Access to the path 'C:\Program Files (x86)\Common Files\Microsoft Shared\DevServer\10.0\report.pdf' is denied.
Jestem również nie jestem pewien co się stanie, gdy zostanie wykonana linia Process.Start(filename);
.
Jest to kod w 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
}
}
Jest próbka internetowej pokazuje, jak uzyskać tablicę bajtów i zwrócić ją użytkownikowi bez MVC. W MVC potrzebujesz tylko kodu, aby uzyskać tablicę bajtów (ze strumienia pamięci, bez pliku). Próbka: http://www.pdfsharp.net/wiki/Clock-sample.ashx –
Dla nowych użytkowników, staje się nieco mylące, więc czy (NickAlbrecht) kłopot aktualizacji odpowiedzi, aby dokładnie takie rzeczy, jak @PDFsharpTeam dodał link pomocnika. [** Strumień MemoryStream = new MemoryStream(); //// document.Save (stream, false); //// Byte [] documentBytes = stream.ToArray(); //// return File (documentBytes, "application/pdf"); **] (Bardzo mi to pomogło.) Thank you !!!) –