使用 ItextSharp HTML生成Pdf(C#)
以前生成pdf的时候。因为生成的pdf数据是固定的,所以先做好pdf模板,动态的数据可以先用占位符
生成的时候。找到占位符坐标。把数据填充进去
优点:先做好模板。生成的pdf 表格、文、内容会好看一些
缺点:只能用作固定的数据生成。如果所有的数据都是动态从数据库查询的,就不适用
每次都需要找占位符的具体坐标
后来因为数据都是动态生成,这种需求没有办法达到,找了一些资料,html生成 pdf
优点:操作数据方便,把页面写好。帮组类 解析子路径获取该页面的html,然后将html代码生成到pdf
缺点:html需要些行内样式,不能定义宽度 (一开始做的时候。div我给定义个宽度。导出的数据一直都是空的 )
关键代码:
if (System.IO.Directory.Exists(Server.MapPath(SystemConst.FILEPATH_PDF)) == false) { System.IO.Directory.CreateDirectory(Server.MapPath(SystemConst.FILEPATH_PDF)); }
//路径
var path = Server.MapPath(string.Format(SystemConst.FILEPATH_PDF + "{0}.pdf", model.UName.GetHashCode()));
//存在则删除
if (System.IO.File.Exists(path) == true) { System.IO.File.Delete(path); } var doc = new Document();
var writer = PdfWriter.GetInstance(doc, new FileStream(path, FileMode.Create));
//打开文档
doc.Open();
//解析子路径获取该页面的html
X.Component.Tools.WebClient wc = new Component.Tools.WebClient();
wc.Encoding = System.Text.Encoding.GetEncoding("utf-8");
//跳转到该页面去获取html值
string strUrl = Url.Action("Report", "QuestionnairesMgr", new { id = model.ID, flag = , cid = Request.QueryString["cid"] }, "http");
//给页面添加cookies值(避免需要验证是否登录)
wc.CookieContainer.Add(new Uri(strUrl), new Cookie("_t", X.Component.Tools.CookieHelper.GetCookieValue("_t")));
string htmlDoc = wc.GetHtml(strUrl);
AddHtml(doc, writer, htmlDoc); #region 将图片插入pdf中
//string chartimg = "http://localhost:8090/Assets/userfiles/imagescharts/" + string.Format("report-charts-{0}.png", id);
//Image img = iTextSharp.text.Image.GetInstance(chartimg);
//doc.Add(img);
#endregion //关闭文档
doc.Close();
//输出文件
return File(path, SystemConst.MIME_PDF, model.UName + ".pdf");
/// <summary>
/// 将html代码生成到pdf
/// </summary>
/// <param name="doc"></param>
/// <param name="writer"></param>
/// <param name="_str"></param>
private void AddHtml(Document doc, PdfWriter writer, string _str)
{
byte[] array = System.Text.Encoding.UTF8.GetBytes(_str);
MemoryStream stream = new MemoryStream(array);
XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, stream, (Stream)null, System.Text.Encoding.UTF8, new SongFontFactory());
} /// <summary>
/// 重写iTextSharp字体(仅仅使用宋体)
/// </summary>
public class SongFontFactory : IFontProvider
{
public Font GetFont(String fontname, String encoding, Boolean embedded, float size, int style, BaseColor color)
{ BaseFont bf3 = BaseFont.CreateFont(@"c:\windows\fonts\simsun.ttc,1", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
Font fontContent = new Font(bf3, size, style, color);
return fontContent; }
public Boolean IsRegistered(String fontname)
{
return false;
}
} #endregion
需要用到的dll:
itextsharp.dll
itextsharp.xmlworker.dll
需要用的到帮组类:
WebClient.cs
使用 ItextSharp HTML生成Pdf(C#)的更多相关文章
- itextsharp图片生成pdf模糊问题解释
I forget to mention that I' am using itextsharp 5.0.2. It turned out that PDF DPI = 110, which means ...
- iTextSharp简单生成pdf和操作pdf添加水印
遇到需要导出页面到pdf,并添加pdf水印的业务.稍微研究了下,借阅网友的前车之鉴,经过使用可行之后的代码贴出来,做个记录,也供需要的网友借阅. public class PDFSetWaterMar ...
- iTextSharp生成pdf的一个简单例子
效果图: 参考:http://www.cnblogs.com/CareySon/archive/2011/11/09/2243496.html http://www.cnblogs.com/julyl ...
- ITextSharp用来生成 PDF 的一个组件
iTextSharp 是用来生成 PDF 的一个组件,在 1998 年夏天的时候,Bruno Lowagie ,iText 的创作者,参与了学校的一个项目,当时使用 HTML 来生成报告,但是,使用 ...
- C#使用itextsharp生成PDF文件
项目需求需要生成一个PDF文档,使用的是VS2010,ASP.NET. 网络上多次搜索没有自己想要的,于是硬着头皮到itextpdf官网看英文文档,按时完成任务,以实用为主,共享一下: 使用HTML文 ...
- itextsharp生成pdf后的直接打印问题
原文 itextsharp生成pdf后的直接打印问题 小弟这两天用itextsharp生成pdf文档,生成的pdf可以直接保存在指定路径的文件夹下,可是user不想保存,想要点一下button,就可以 ...
- 根据PDF模板生成PDF文件(基于iTextSharp)
根据PDF模板生成PDF文件,这里主要借助iTextSharp工具来完成.场景是这样的,假如要做一个电子协议,用过通过在线填写表单数据,然后系统根据用户填写的数据,生成电子档的协议.原理很简单,但是每 ...
- itextsharp利用模板生成pdf文件笔记
iTextSharp是一款开源的PDF操作类库,使用它可以快速的创建PDF文件. 中文参考网站:http://hardrock.cnblogs.com/ http://pdfhome.hope.com ...
- asp.net MVC设计模式中使用iTextSharp实现html字符串生成PDF文件
因个人需求,需要将html格式转换成PDF并加上水印图片.于是乎第一次接触这种需求的小菜鸟博主我,在某度搜索引擎上不断的查阅关键字资料.踩坑,终于有了一个相应的解决方案.以下是解决步骤,记录下来方便以 ...
随机推荐
- MyBatis从入门到放弃四:一对多关联查询
前言 上篇学习了一对一关联查询,这篇我们学习一对多关联查询.一对多关联查询关键点则依然是配置resultMap,在resultMap中配置collection属性,别忽略了ofType属性. 搭建开发 ...
- Spark_总结四
Spark_总结四 1.Spark SQL Spark SQL 和 Hive on Spark 两者的区别? spark on hive:hive只是作为元数据存储的角色,解析 ...
- Maven进阶宝典
前言: 团队在开发过程中用的是maven项目,由于对maven的一些打包流程以及相关参数配置不是太了解,因此应大家的需求做一下maven的讲解,为了不误导大家,看了很多相关资料,自己也实验了一下,就把 ...
- wemall app商城源码Android数据的SharedPreferences储存方式
wemall-mobile是基于WeMall的Android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享wemall app商城源码Android数据 ...
- wemall app商城源码android开发MD5加密工具类
wemall-mobile是基于WeMall的android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享android开发MD5加密工具类主要代码,供 ...
- 基于 Koa平台Node.js开发的KoaHub.js的跳过组件代码
koahub-skip koahub skip middleware koahub skip Conditionally skip a middleware when a condition is m ...
- 1751: [Usaco2005 qua]Lake Counting
1751: [Usaco2005 qua]Lake Counting Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 190 Solved: 150[Su ...
- Oracle数据库笔记
SQL分为四大类别 1.DDL:Date Definition Language 数据定义语言 用于建立.修改.删除数据库对象(create创建表和其它对象结构:alter修改表或其它结构:drop ...
- JavaScript-变量的作用域面试题
块级作用域 - 在其他的语言中,任何一对花括号中的语句都属于一个块,在这之中定义的所有变量在代码块外是不可见的 - JavaScript中没有块级作用域 //这里只有函数中定义的变 ...
- FDG内存分配器笔记
FDG: 大规模并行系统中的动态内存分配器由于需要全局同步(记账) ,导致性能急剧下降. 代码解析 1.superblock 类中包含两个变量,两个函数.默认superblock大小为2048 ite ...