使用 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 = 0, 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

时间: 2024-11-05 04:42:59

使用 ItextSharp HTML生成Pdf(C#)的相关文章

ITextSharp用来生成 PDF 的一个组件

iTextSharp 是用来生成  PDF 的一个组件,在 1998 年夏天的时候,Bruno Lowagie ,iText 的创作者,参与了学校的一个项目,当时使用 HTML 来生成报告,但是,使用 HTML 打印的效果很不理想.最后,他发现,使用 PDF 可以完美解决打印问题,为了能够在各个系统中使用,iText 组件库诞生了. 网页上面浏览pdf,目前一般是先转成swf格式,再查看. http://sourceforge.net/projects/itextsharp/files/

itextsharp利用模板生成pdf文件笔记

iTextSharp是一款开源的PDF操作类库,使用它可以快速的创建PDF文件. 中文参考网站:http://hardrock.cnblogs.com/ http://pdfhome.hope.com.cn/Article.aspx?CID=bf51a5b6-78a5-4fa3-9310-16e04aee8c78&AID=f5fe52dd-8419-4baa-ab1c-ea3f26952132 英文参考网站:http://itext.ugent.be/library/ ·  技术文章(http:

iTextSharp生成pdf的一个简单例子

效果图: 代码: /// <summary> /// Compare页面生成pdf功能. /// </summary> /// <param name="country">国家</param> /// <param name="pns">pn</param> /// <param name="language">语言</param> /// <r

使用ITextSharp生成PDF文件心得

最近公司在做一个项目,需要把数据导出成PDF格式的文件,然后再网上搜了一下发现开源的组件还挺多的,用的比较多的就是itextsharp,itextsharp由java的itext演变而来,并且提供的丰富的功能,能够制作表格.插入图片等,这是官网的下载地址:http://sourceforge.net/projects/itextsharp/,下面就来简单介绍一下使用itextsharp的心得. 首先创建一个winform应用程序,并且添加itextsharp的引用,在按钮的单击事件写上生成pdf

C# html生成PDF遇到的问题,从iTextSharp到wkhtmltopdf

我们的网站业务会生成一个报告,用网页展示出来,要有生成pdf并下载的功能,关键是生成pdf. 用内容一段段去拼pdf,想想就很崩溃,所以就去网上找直接把html生成pdf的方法. 网上资料大部分都是用的iTextSharp的XMLWorkerHelper做的(代码我贴在后面),遇到的问题是,它对css样式的支持比较古老或者说简单,所以重新改了一下我的html样式,div大部分都换成了table等,搞定后运行了一段时间没出什么问题. 但是,最近发现它有一种情况会报错.我的html内容是一个订单,包

MVC 生成PDf表格并插入图片

最近做的项目中有一个功能,将最终的个人信息生成PDF表格,并插入图片.对于没接触过的程序员来说回一片茫然,网上有多种生成PDf的方法,我给大家介绍一下我认为比较简单,好操作的一种. iTextSharp组件 使用方法. 1,引入itextsharp.dll 2,  引入命名空间 ? 1 2 3 using iTextSharp; using iTextSharp.text; using iTextSharp.text.pdf; ? 1 2 3 4 5 6 7 8 9 10 11 12     D

asp.net 生成PDF方法

今天转博客园看到有人发表了一篇生成PFd的文章,准备自己也留一份准备以后用到的时候方便调用: 首先去itextsharp网站下载控件(https://sourceforge.net/projects/itextsharp) 将下载后的控件引用到自己的项目里面,主要的bll文件为:itextsharp.dll文件 1.根据DataTable生成PDF文件 添加Itextsharp引用 using iTextSharp;using iTextSharp.text;using iTextSharp.t

C#生成PDF页脚第几页共几页

C#生成PDF页脚第几页共几页 分类: .net 2012-06-06 21:04 2842人阅读 评论(3) 收藏 举报 c#stringfontsfileheaderwindows 我在网上找了好久都没找到在封面显示生成的PDF总页数,然后自己摸索着做出来,分享给大家. 我用的是这个组件来实现的.net生成PDF. 首先创建一个工程,然后引用这个组件 然后创建一个页面,添加一个 按钮 然后开始写后台了..不多说,直接贴代码. [csharp] view plaincopy protected

C#生成PDF总结

(一)C#生成PDF总结 (1)iTextSharp控件对iTextSharp研究还可以表格.文字.各种GDI对象,图片,水印,文字旋转(2)aspose的控件(3)PDF Library这个类库(只单纯是有文字的,表格和文字)http://www.codeproject.com/KB/dotnet/PdfLibrary.aspx (4)直接用.net的RDLC report 就可以啦,to PDF效果很好,也可以对付用户有变数,可以to 其他格式. (二)iTextSharp生成PDF示列 u