我的项目与NerdDinner非常相似,我正在使用PdfSharp生成pdf文档。
在我看来,我正在使用它:
<%: Html.ActionLink("Pdf", "GeneratePdf1", "Persons")%>
调用此ActionResult:
public ActionResult GeneratePdf1()
{
// Create a new PDF document
PdfDocument document = new PdfDocument();
document.Info.Title = "Created with PDFsharp";
// Create an empty page
PdfPage page = document.AddPage();
// Get an XGraphics object for drawing
XGraphics gfx = XGraphics.FromPdfPage(page);
// Create a font
XFont font = new XFont("Verdana", 20, XFontStyle.BoldItalic);
// Draw the text
gfx.DrawString("Hello, World!", font, XBrushes.Black,
new XRect(0, 0, page.Width, page.Height),
XStringFormats.Center);
// Save the document...
const string filename = "HelloWorld.pdf";
document.Save(filename);
Process.Start(filename);
return View();
}
关于此问题的几个问题:
答案 0 :(得分:4)
您想要返回FileResult
而不是ActionResult
。另外,我会将它保存到MemoryStream
并返回字节数组,而不是使用文件。完整解决方案如下。
public FileResult GeneratePdf1()
{
// Create a new PDF document
PdfDocument document = new PdfDocument();
document.Info.Title = "Created with PDFsharp";
// Create an empty page
PdfPage page = document.AddPage();
// Get an XGraphics object for drawing
XGraphics gfx = XGraphics.FromPdfPage(page);
// Create a font
XFont font = new XFont("Verdana", 20, XFontStyle.BoldItalic);
// Draw the text
gfx.DrawString("Hello, World!", font, XBrushes.Black,
new XRect(0, 0, page.Width, page.Height),
XStringFormats.Center);
MemoryStream stream = new MemoryStream();
document.Save(stream, false);
return File(stream.ToArray(), "application/pdf");
}
答案 1 :(得分:2)
你应该替换这些行:
Process.Start(filename);
return View();
与
return File(filename, "application/pdf");
如果下载的文件名与操作名称不同,您可能还有第三个参数。
return File(filename, "application/pdf", "myGeneratedPdf.pdf");
另外,请确保每个请求的文件名都是唯一的,或使用像Chris Kooken建议的MemoryStream
。
顺便说一句:Process.Start(filename)
将在服务器计算机上运行该文件。这可能适用于您的开发机器,但在实时服务器上,pdf将在服务器上打开!!!