Использование Report.NET код для возврата их Привет мир пример в действии MVC:
public void MyPDFAction()
{
Root.Reports.Report report = new Root.Reports.Report(new PdfFormatter());
FontDef fd = new FontDef(report, "Helvetica");
FontProp fp = new FontPropMM(fd, 25);
Page page = new Page(report);
page.AddCB_MM(80, new RepString(fp, "Hello World!"));
RT.ViewPDF(report, "HelloWorld.pdf");
}
Тип возврата действия недействителен, поскольку код Report.NET напрямую обновляет ответ, который возвращается по умолчанию для недействительных действий. Это открывает программу просмотра PDF прямо из браузера.
Чтобы получить ответ, возвращенный в виде страницы, а не загрузки, замените строку RT.ViewPDF на
RT.ResponsePDF(report, System.Web.HttpContext.Current.Response);
Однако этот метод помечен как устаревший в пользу того, который работает с System.Web.UI.Page. К сожалению, я не знаю, как обращаться с объектом Page в контексте приложения MVC.
Мне не удалось заставить Report.NET инициировать загрузку файла PDF.
Скачать Report.NET здесь .
Редактировать Я недавно обнаружил PDFSharp , который, по-видимому, поддерживается совсем недавно, чем Report.NET. Это также доступно под лицензией MIT. Вы можете скачать с здесь . Также есть обширная вики со множеством примеров.
Базовый код для возврата файла для загрузки в MVC:
[HttpGet]
public ActionResult MyPdfAction()
{
using (MemoryStream stream = new MemoryStream())
{
PdfDocument document = new PdfDocument();
PdfPage page = document.AddPage();
XGraphics gfx = XGraphics.FromPdfPage(page);
XFont font = new XFont("Verdana", 20, XFontStyle.Bold);
gfx.DrawString("Hello, World!", font, XBrushes.Black, new XRect(0, 0, page.Width, page.Height), XStringFormats.Center);
document.Save(stream, false);
return File(stream.ToArray(), "application/pdf", "HelloWorld.pdf");
}
}
Другое редактирование Если вам интересно создавать в основном текстовые документы с таблицами, стоит проверить MigraDoc , поскольку он предоставляет полезный слой абстракции поверх примитивов PDFSharp , MigraDoc включен в загрузку PDFSharp. Вам нужно добавить проекты PDFSharp, PDFSharp.Charting, MigraDoc.DocumentObjectModel и MigraDoc.Rendering в ваш проект, чтобы все это заработало.
Код для создания PDF для скачивания здесь:
[HttpGet]
public ActionResult MyPdfAction()
{
using (MemoryStream stream = new MemoryStream())
{
Document document = CreateDocument();
document.UseCmykColor = true;
const bool unicode = false;
const PdfFontEmbedding embedding = PdfFontEmbedding.Always;
PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer(unicode, embedding);
pdfRenderer.Document = document;
pdfRenderer.RenderDocument();
pdfRenderer.PdfDocument.Save(stream, false);
return File(stream.ToArray(), "application/pdf", "HelloWorld.pdf");
}
}
/// <summary>
/// Creates an absolutely minimalistic document.
/// </summary>
static Document CreateDocument()
{
Document document = new Document();
Section section = document.AddSection();
Paragraph paragraph = section.AddParagraph();
paragraph.Format.Font.Color = Color.FromCmyk(100, 30, 20, 50);
paragraph.AddFormattedText("Hello, World!", TextFormat.Bold);
return document;
}
Резюме Изучив ряд решений PDF для C # MVC, я использую PDFSharp / MigraDoc. Я обесценил iTextSharp и проекты на его основе из-за дорогостоящих затрат на лицензирование, если вы используете его в коммерческих целях (2500 евро в моем случае). Report.NET был разработан с учетом классики ASP.NET и не обновлялся с 2006 года.