亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#使用itextsharp生成PDF文件的實現代碼

2020-01-24 03:11:24
字體:
來源:轉載
供稿:網友
項目需求需要生成一個PDF文檔,使用的是VS2010,ASP.NET。
網絡上多次搜索沒有自己想要的,于是硬著頭皮到itextpdf官網看英文文檔,按時完成任務,以實用為主,共享一下:
使用HTML文件創建PDF模板:
使用自定義字體的一種方法:
復制代碼 代碼如下:

                FontFactory.Register(System.Web.HttpContext.Current.Request.PhysicalApplicationPath + "http://Fonts//RAGE.TTF", "myFont");
                Font myFont = FontFactory.GetFont("myFont");
                BaseFont bf = myFont.BaseFont;

其中RAGE.TTF是微軟操作系統自帶的字體,目錄在C:/Windows/Fonts,建議將需要的字體拷貝到項目中使用,否則會出現引用不到的情況。
使用自定義樣式:
復制代碼 代碼如下:

                StyleSheet css = new StyleSheet();
                Dictionary<String, String> dict= new Dictionary<string, string>();
                dict.Add(HtmlTags.BGCOLOR, "#01366C");
                dict.Add(HtmlTags.COLOR, "#000000");
                dict.Add(HtmlTags.SIZE,"25");
                css.LoadStyle("css1", dict);

這里既可以使用了StyleSheet的LoadStyle方法。
注意itextsharp對HTML元素的支持很弱,像label、div等元素的對齊、背景顏色等屬性支持不好,建議使用table標簽。
重寫Font的GetFont方法:
復制代碼 代碼如下:

public  class MyFontFactory : IFontProvider
        {
            public  Font GetFont(String fontname,String encoding, Boolean embedded, float size,int style, BaseColor color)
            {
                if (fontname == "微軟雅黑")
                {
                    string fontpath = System.Web.HttpContext.Current.Request.PhysicalApplicationPath + "http://Fonts//MSYH.ttf";
                    BaseFont bf3 = BaseFont.CreateFont(fontpath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
                    Font fontContent = new Font(bf3,size,style,color);
                    return fontContent;
                }
                else {
                    Font fontContent = FontFactory.GetFont(fontname, size, style, color);
                    return fontContent;
                }
            }
            public  Boolean IsRegistered(String fontname)
            {
                return false;
            }
        }

這里要想使用自定義字體需要繼承IFontProvider接口,并重寫Font的GetFont方法。
將自定義字體和樣式表加入到文檔:
復制代碼 代碼如下:

                Dictionary<String, Object> font = new Dictionary<string, object>();
                font.Add(HTMLWorker.FONT_PROVIDER,new MyFontFactory());

                List<IElement> p = HTMLWorker.ParseToList(new StreamReader(html), css,font);

使用PdfContentByte為元素加背景顏色:
復制代碼 代碼如下:

                PdfContentByte pcb = writer.DirectContentUnder;
                pcb.SetRGBColorFill(0, 255, 0);
                pcb.SetRGBColorFill(1, 54, 108);
                pcb.Rectangle(20, 413, 800, 42);
                pcb.Fill();

缺點顯而易見,就是需要絕對坐標,小弟學疏才淺,再加時間緊迫,只能如此。如果大牛知道更好的方法,還望不吝賜教。
完整代碼:
復制代碼 代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using iTextSharp.text.pdf;
using iTextSharp.text;
using System.IO;
using iTextSharp.text.html.simpleparser;
using iTextSharp.text.html;
/// <summary>
///CreatePDF 的摘要說明
/// </summary>
namespace WSE.LCPI
{
    public class CreatePDF
    {
        public CreatePDF()
        {
            //
            //TODO: 在此處添加構造函數邏輯
            //
        }
       public  class MyFontFactory : IFontProvider
        {
            public  Font GetFont(String fontname,String encoding, Boolean embedded, float size,int style, BaseColor color)
            {
                if (fontname == "微軟雅黑")
                {
                    string fontpath = System.Web.HttpContext.Current.Request.PhysicalApplicationPath + "http://LCPI//Fonts//MSYH.ttf";
                    BaseFont bf3 = BaseFont.CreateFont(fontpath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
                    Font fontContent = new Font(bf3,size,style,color);
                    return fontContent;
                }
                else {
                    Font fontContent = FontFactory.GetFont(fontname, size, style, color);
                    return fontContent;
                }
            }
            public  Boolean IsRegistered(String fontname)
            {
                return false;
            }
        }
        /// <summary>
        /// 生成PDF
        /// </summary>
        /// <param name="html"></param>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public static Boolean HTMLToPDF(string html, String fileName)
        {
            Boolean isOK = false;
            try
            {
                TextReader reader = new StringReader(html);
                // step 1: creation of a document-object
                Document document = new Document(PageSize.A4.Rotate(), 30, 30, 30, 30);
                // step 2:
                // we create a writer that listens to the document
                // and directs a XML-stream to a file
                fileName = System.Web.HttpContext.Current.Request.PhysicalApplicationPath + "http://PDF//" + fileName+".pdf";
              FileStream fs=new FileStream(fileName, FileMode.Create,FileAccess.Write,FileShare.ReadWrite);
                PdfWriter writer = PdfWriter.GetInstance(document,fs );
                HTMLWorker worker = new HTMLWorker(document);
                document.Open();
                worker.StartDocument();
                StyleSheet css = new StyleSheet();
                Dictionary<String, Object> font = new Dictionary<string, object>();
                font.Add(HTMLWorker.FONT_PROVIDER,new MyFontFactory());
                Dictionary<String, String> dict= new Dictionary<string, string>();
                dict.Add(HtmlTags.BGCOLOR, "#01366C");
                dict.Add(HtmlTags.COLOR, "#000000");
                dict.Add(HtmlTags.SIZE,"25");
                css.LoadStyle("css", dict);

                List<IElement> p = HTMLWorker.ParseToList(new StreamReader(html), css,font);
                for (int k = 0; k < p.Count; k++)
                {
                    document.Add((IElement)p[k]);
                }
                PdfContentByte pcb = writer.DirectContentUnder;
                pcb.SetRGBColorFill(0, 255, 0);
                pcb.SetRGBColorFill(1, 54, 108);
                pcb.Rectangle(20, 413, 800, 42);
                pcb.Fill();
                worker.EndDocument();
                worker.Close();              
                document.Close();
                reader.Close();
                isOK = true;
            }
            catch (Exception ex)
            {
                isOK = false;
            }
            finally {

            }
            return isOK;
        }
    }
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲在线观看视频| 欧美在线激情网| 最新国产精品亚洲| 国产精品青青在线观看爽香蕉| 尤物九九久久国产精品的特点| 成人免费视频网址| 欧美精品18videos性欧美| 成人国产精品久久久久久亚洲| 日韩一区视频在线| 日韩av电影在线播放| 日韩精品极品视频免费观看| 成人啪啪免费看| 久久国产精品久久久久| 精品露脸国产偷人在视频| 欧美激情中文网| 国外成人性视频| 伊人久久大香线蕉av一区二区| 久久亚洲国产成人| 97成人精品视频在线观看| 91禁外国网站| 色综久久综合桃花网| 日韩精品福利网站| 日韩av观看网址| 久久亚洲综合国产精品99麻豆精品福利| 久久久久久久av| 亚洲人成自拍网站| 久久久天堂国产精品女人| 国产精品18久久久久久麻辣| 国产精品夜色7777狼人| 亚洲欧洲在线免费| 日产精品99久久久久久| 久久久久久久999精品视频| 欧美激情在线观看视频| 精品国产一区久久久| 欧美诱惑福利视频| 一本色道久久综合狠狠躁篇的优点| 欧美日韩国产成人在线观看| 国产欧美亚洲视频| 懂色av中文一区二区三区天美| 亚洲第一av在线| 欧美成人高清视频| 欧美精品在线看| 色综合久久悠悠| 亚洲tv在线观看| 久久久久国产精品一区| 一区二区三区四区视频| 亚洲加勒比久久88色综合| 久久久国产精品免费| 欧美视频在线观看免费| 欧美极品第一页| 国产午夜一区二区| 亚洲男人天堂2024| 在线精品国产欧美| 岛国av一区二区在线在线观看| 久久精品视频va| 日本久久久久亚洲中字幕| 国产精品国产三级国产aⅴ9色| 国产精品久久77777| 亚洲精品美女免费| 日韩美女写真福利在线观看| 美女av一区二区三区| 国产欧美日韩最新| 91精品国产高清久久久久久| 午夜剧场成人观在线视频免费观看| 国精产品一区一区三区有限在线| 高清日韩电视剧大全免费播放在线观看| 国产在线高清精品| 亚洲精品suv精品一区二区| 久久久久久久久久久成人| 夜色77av精品影院| 日韩av日韩在线观看| 伊人久久男人天堂| 日本久久中文字幕| 97精品伊人久久久大香线蕉| 欧美在线亚洲在线| 久久国产精品电影| 97精品久久久中文字幕免费| 国产精品久久一| 91在线看www| 国产91色在线|免| 欧美高跟鞋交xxxxhd| 国产精品精品久久久久久| 国产日韩在线精品av| 国产午夜精品一区二区三区| 国产91精品久久久久久久| 日韩激情视频在线播放| 国产精品第七影院| 久久视频免费在线播放| 成人免费午夜电影| 九九热这里只有精品6| 日本久久久a级免费| 亚洲老板91色精品久久| 国产精品丝袜视频| 亚洲香蕉伊综合在人在线视看| 日韩av三级在线观看| 97精品视频在线播放| 欧美放荡办公室videos4k| 在线色欧美三级视频| 欧美做爰性生交视频| 精品少妇v888av| 日韩在线观看免费高清完整版| 亚洲偷熟乱区亚洲香蕉av| 国产精品一区=区| 91av在线看| 国产欧美一区二区| 成人国产精品一区二区| 国产亚洲精品久久久久久777| 日韩精品中文字幕在线播放| 亚洲欧美三级在线| 国产一区二区三区网站| 狠狠躁天天躁日日躁欧美| 欧美噜噜久久久xxx| 亚洲男人天堂网站| 亚洲国产精品一区二区三区| 亚洲美女动态图120秒| 国产精品igao视频| 国产精品久久久久一区二区| 在线激情影院一区| 国产99在线|中文| 成人黄色激情网| 久久婷婷国产麻豆91天堂| 亚洲аv电影天堂网| 久久精品中文字幕免费mv| 国产精品视频yy9099| 欧美第一页在线| 日本午夜人人精品| 国产精品91久久久久久| 性色av一区二区三区红粉影视| 欧美极品美女电影一区| 亚洲自拍小视频| 欧美乱妇40p| 国产精品第七影院| 中文字幕免费国产精品| 国产亚洲成精品久久| 欧美成人四级hd版| 国产美女久久久| 日韩不卡中文字幕| 欧美精品videos另类日本| 国产女同一区二区| 国产69精品99久久久久久宅男| 国产精品福利在线| 欧美日韩中文在线| 国产欧美日韩精品丝袜高跟鞋| 日韩国产欧美精品一区二区三区| 亚洲japanese制服美女| 国产精品7m视频| 国产亚洲aⅴaaaaaa毛片| 精品亚洲永久免费精品| 欧美精品一区二区三区国产精品| 欧美视频一二三| 91精品久久久久久久| 91高清在线免费观看| 日韩在线播放一区| 午夜精品免费视频| 国产精品igao视频| 亚洲精品一二区| 在线午夜精品自拍| 亚洲无av在线中文字幕| 久久久噜噜噜久久中文字免| 国产精品自拍网| 欧美亚洲成人xxx| 亚洲字幕一区二区| 92福利视频午夜1000合集在线观看| 日韩动漫免费观看电视剧高清|