hmi*_*aya 10 pdf asp.net asp.net-mvc
我想从我的asp.net mvc应用程序打印收据.目前我认为我最好的选择是创建PDF文件,因为它们要打印它们,因为边距/页眉/页脚/等等更容易处理.
我不想让他们配置他们的浏览器只是为了打印我的收据,其中一些不是那么聪明.
还有其他选择吗?
什么是最好的(免费)库/ api从asp.net mvc应用程序生成PDF
使用Report.NET,在MVC操作中返回hello world示例的代码是:
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");
}
Run Code Online (Sandbox Code Playgroud)
返回类型的操作是无效的,因为Report.NET代码直接更新响应,默认情况下会为void操作返回该响应.这将直接从浏览器打开pdf查看器.
要将响应作为页面而不是下载返回,请将RT.ViewPDF行替换为
RT.ResponsePDF(report, System.Web.HttpContext.Current.Response);
Run Code Online (Sandbox Code Playgroud)
但是,此方法被标记为已弃用,而有利于处理System.Web.UI.Page的方法.不幸的是,我不知道如何在MVC应用程序的上下文中处理Page对象.
我一直无法让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");
}
}
Run Code Online (Sandbox Code Playgroud)
另一个编辑如果您对使用表生成大部分基于文本的文档感兴趣,那么非常值得查看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;
}
Run Code Online (Sandbox Code Playgroud)
总结看了很多C#MVC的PDF解决方案后,我正在使用PDFSharp/MigraDoc.我已经打折iTextSharp并基于它进行项目,因为如果你在商业上使用它会花费很高的许可费用(在我的情况下为2500欧元).Report.NET是在考虑ASP.NET经典的情况下开发的,自2006年以来一直没有收到更新.
我使用Report.net和iTextSharp以PDF格式创建条形码标签取得了很大的成功.特别是对于iTextSharp,API看起来很简单,并且在我们的ASP.NET MVC应用程序中运行良好.没有很多关于iTextSharp的文档,所以你必须查找iText的java文档(它是它的端口).
额外奖励:他们都是免费的!
| 归档时间: |
|
| 查看次数: |
15604 次 |
| 最近记录: |