查看: 1131|回复: 0

[ASP.NET教程] 简单了解 iTextSharp实现HTML to PDF

发表于 2018-4-25 08:00:02

查了下 转PDF的各种框架 发现大部分都是收费的。 发现一款免费的iTextSharp 就想玩一下

只是简单做个HTML 转PDF 没有过深的探究。

首先 我在项目中引入iTextSharp 还是老方法 要么 NuGet上下载 或者 直接命令

然后在项目中建了一个HTML 里面就是一些简单的标签 和一些占位符

然后建了个PDF帮助类 里面实现具体转换的方法

  1. public class PDFHelp
  2. {
  3. public byte[] ConvertHtmlTextToPDF(string htmltext)
  4. {
  5. if (string.IsNullOrEmpty(htmltext))
  6. {
  7. return null;
  8. }
  9. //避免htmlText没有任何html tag标签的純文字时,转PDF时会挂掉,所以一律加上<p>标签
  10. //htmlText = "<p>" + htmltext + "</p>";
  11. MemoryStream stream = new MemoryStream();
  12. byte[] data = Encoding.UTF8.GetBytes(htmltext);
  13. MemoryStream msInput = new MemoryStream(data);
  14. Document doc = new Document();
  15. PdfWriter writer = PdfWriter.GetInstance(doc, stream);
  16. //指定文件默认缩放标准100%
  17. PdfDestination pdfDest = new PdfDestination(PdfDestination.XYZ, 0, doc.PageSize.Height, 1f);
  18. doc.Open();
  19. //使用XMLWorkerHelper把Html parse到PDF
  20. XMLWorkerHelper .GetInstance().ParseXHtml(writer, doc, msInput, null, Encoding.UTF8, new UnicodeFontFactory());
  21. //將pdfDest 写入到PDF
  22. PdfAction action = PdfAction.GotoLocalPage(1, pdfDest, writer);
  23. writer.SetOpenAction(action);
  24. doc.Close();
  25. msInput.Close();
  26. stream.Close();
  27. //回传PDF
  28. return stream.ToArray();
  29. }
  30. }
复制代码

占位符的简单替换 测试下。只写了三个 举个例子

  1. public string Placeholderfill(string htmlContext)
  2. {
  3. var entity = _shopingRepository.FindAll().FirstOrDefault();
  4. htmlContext = htmlContext.Replace("{{SHOPINGNAME}}", entity.ShopingName);
  5. htmlContext = htmlContext.Replace("{{SHOPINGPric}}", entity.ShopingPric.ToString());
  6. htmlContext = htmlContext.Replace("{{SHOPINGNuber}}", entity.ShopingCount.ToString());
  7. return htmlContext;
  8. }
复制代码

接下了就是控制器 的调用了

  1. public FileResult ExportPDF()
  2. {
  3. string htmlContext = System.IO.File.ReadAllText(Server.MapPath("~/HTMLTemplate/ShopingBuy.html"));
  4. var context= _iShopingServer.Placeholderfill(htmlContext);
  5. PDFHelp pf = new PDFHelp();
  6. var ms= pf.ConvertHtmlTextToPDF(context);
  7. return File(ms,"application/pdf", "shoping"+ DateTime.Now+ ".pdf");
  8. }
复制代码

在页面上写个点击PDF下载的按钮 Ajax 调用这个方法 然后就是最终实现的效果。 写的很粗糙。 但实现的过程还是比较容易的。

一般业务都是转PDF然后加入邮箱附件 用来发邮件的。

这里只是简单实现。 有时间还得继续深入研究



回复

使用道具 举报