我们正在制作一个ASP.Net MVC应用程序,该应用程序需要能够生成PDF并将其显示在屏幕上或将其保存在用户易于访问的地方。我们使用PdfSharp来生成文档。一旦完成,我们如何让用户保存文档或在阅读器中打开文档?我特别困惑,因为PDF是在服务器端生成的,但我们希望它显示在客户端。如何在ASP.Net MVC中使用PdfSharp显示PDF?
这里是MVC控制器创建我们迄今书面报告:
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);
}
}
在运行此,我得到一个UnauthorizedAccessException
在documentRenderer.PdfDocument.Save(filename);
,说,Access to the path 'C:\Program Files (x86)\Common Files\Microsoft Shared\DevServer\10.0\report.pdf' is denied.
我也不能肯定执行行Process.Start(filename);
时会发生什么情况。
这是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
}
}
有一个网页样本它显示了如何获取字节数组并将其返回给没有使用MVC的用户。使用MVC,只需要获取字节数组的代码(来自内存流,不需要文件)。示例:http://www.pdfsharp.net/wiki/Clock-sample.ashx – 2013-02-28 09:15:40
对于新用户来说,它变得有点令人困惑,所以你(尼克阿尔布雷希特)麻烦地更新答案来做像@PDFsharpTeam这样的确切事情。帮手链接。 [** MemoryStream stream = new MemoryStream(); //// document.Save(stream,false); //// Byte [] documentBytes = stream.ToArray(); //// return文件(documentBytes,“application/pdf”); **](它对我有很大的帮助,谢谢!!!) – 2016-03-15 17:16:18