chúng tôi đang tạo một ứng dụng ASP.Net MVC cần có khả năng tạo tệp PDF và hiển thị nó lên màn hình hoặc lưu ở nơi nào đó dễ dàng để người dùng truy cập. Chúng tôi đang sử dụng PdfSharp để tạo tài liệu. Khi đã hoàn tất, làm cách nào để người dùng lưu tài liệu hoặc mở tài liệu đó trong trình đọc? Tôi đặc biệt bối rối vì PDF được tạo phía máy chủ nhưng chúng tôi muốn nó hiển thị phía máy khách.Làm cách nào để hiển thị tệp PDF bằng PdfSharp trong ASP.Net MVC?
Dưới đây là bộ điều khiển MVC để tạo ra các báo cáo mà chúng tôi đã viết cho đến nay:
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);
}
}
Khi điều này chạy, tôi nhận được một UnauthorizedAccessException
tại documentRenderer.PdfDocument.Save(filename);
nói rằng, Access to the path 'C:\Program Files (x86)\Common Files\Microsoft Shared\DevServer\10.0\report.pdf' is denied.
Tôi cũng không chắc chắn điều gì sẽ xảy ra khi dòng Process.Start(filename);
được thực hiện.
Đây là mã trong 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ó một mẫu web cho thấy cách lấy mảng byte và trả về cho người dùng không có MVC. Với MVC bạn chỉ cần mã để lấy mảng byte (từ luồng bộ nhớ, không cần tệp). Ví dụ: http://www.pdfsharp.net/wiki/Clock-sample.ashx –
Đối với người dùng mới, điều đó trở nên hơi khó hiểu, vì vậy bạn (NickAlbrecht) bận tâm cập nhật câu trả lời để thực hiện chính xác điều như @PDFsharpTeam đã thêm liên kết trợ giúp. [** MemoryStream stream = new MemoryStream(); //// document.Save (stream, false); //// Byte [] documentBytes = stream.ToArray(); //// return File (documentBytes, "application/pdf"); **] (Nó đã giúp tôi rất nhiều. Cảm ơn bạn !!!) –