我是MVC的初学者,需要在提供的模板上生成发票的PDF。在做了一些谷歌搜索之后,现在我能够生成一个pdf而不是模板。任何身体都可以帮助我。我在下面写下我的代码:
public ActionResult pdfStatement(string InvoiceNumber)
{
InvoiceNumber = InvoiceNumber.Trim();
ObjectParameter[] parameters = new ObjectParameter[1];
parameters[0] = new ObjectParameter("InvoiceNumber", InvoiceNumber);
var statementResult = _db.ExecuteFunction<Models.Statement>("uspInvoiceStatement", parameters);
Models.Statement statement = statementResult.SingleOrDefault();
return ViewPdf("Invoice", "pdfStatement", statement);
}
public class PdfViewController : Controller
{
private readonly HtmlViewRenderer htmlViewRenderer;
private readonly StandardPdfRenderer standardPdfRenderer;
public PdfViewController()
{
this.htmlViewRenderer = new HtmlViewRenderer();
this.standardPdfRenderer = new StandardPdfRenderer();
}
protected ActionResult ViewPdf(string pageTitle, string viewName, object model)
{
// Render the view html to a string.
string htmlText = this.htmlViewRenderer.RenderViewToString(this, viewName, model);
// Let the html be rendered into a PDF document through iTextSharp.
byte[] buffer = standardPdfRenderer.Render(htmlText, pageTitle);
// Return the PDF as a binary stream to the client.
return new BinaryContentResult(buffer, "application/pdf");
}
}
public class BinaryContentResult : ActionResult
{
private readonly string contentType;
private readonly byte[] contentBytes;
public BinaryContentResult(byte[] contentBytes, string contentType)
{
this.contentBytes = contentBytes;
this.contentType = contentType;
}
public override void ExecuteResult(ControllerContext context)
{
var response = context.HttpContext.Response;
response.Clear();
response.Cache.SetCacheability(HttpCacheability.Public);
response.ContentType = this.contentType;
using (var stream = new MemoryStream(this.contentBytes))
{
stream.WriteTo(response.OutputStream);
stream.Flush();
}
}
}
答案 0 :(得分:6)
我会推荐iTextSharp库。
使用该库从c#中查看此 tutorial on how to populate a pdf 。使用Adobe Acrobat中的字段创建pdf,然后从代码中填充字段。
// Open the template pdf
PdfReader pdfReader = new PdfReader(Request.MapPath("~/assets/form.pdf"));
PdfStamper pdfStamper = new PdfStamper(pdfReader, Response.OutputStream);
pdfStamper.FormFlattening = true; // generate a flat PDF
// Populate the fields
AcroFields pdfForm = pdfStamper.AcroFields;
pdfForm.SetField("InvoiceRef", "00000");
pdfForm.SetField("DeliveryAddress", "Oxford Street, London");
pdfForm.SetField("Email", "anon@anywhere.com");
pdfStamper.Close();
答案 1 :(得分:3)
这不是问题的答案,而是我在asp.net中关于pdf生成的经验。也许它会节省你的时间。 不幸的是,我没有找到足够的免费工具来生成pdf文件。
我尝试使用HtmlViewRenderer,但它对我来说对复杂的css不起作用。 比我找到pdfsharp。有很多关于StackOverFlow使用的好文章。
这有助于我创建发票 - 简单的表格,但我想警告,你会用手添加行。而且该代码看起来不太好。它也不适用于复杂的CSS。
对于丰富多彩的报道,我们正在使用PdfCrowd。 这是一种将您的html呈现为pdf的服务。它运作完美,但不是免费的,最便宜的计划每年花费10美元。
在官方网站上,您可以找到ASP.NET的.net库和示例。
答案 2 :(得分:0)