C# 将 HTML 转换为图片或 PDF

来源:互联网 发布:计算微积分的软件 编辑:程序博客网 时间:2024/05/17 22:43

首先是把 HTML 转换为图片。

复制代码
public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        WebBrowser webBrowser = null;        public void ConvertToImg()        {            webBrowser = new WebBrowser();            //是否显式滚动条            webBrowser.ScrollBarsEnabled = false;            //加载HTML页面的地址            webBrowser.Navigate("http://www.baidu.com");                        //页面加载完成执行事件            webBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser_DocumentCompleted);        }        private void webBrowser_DocumentCompleted(object sender, EventArgs e)//这个就是当网页载入完毕后要进行的操作        {            //获取解析后HTML的大小            System.Drawing.Rectangle rectangle = webBrowser.Document.Body.ScrollRectangle;            int width = rectangle.Width;            int height = rectangle.Height;            //设置解析后HTML的可视区域            webBrowser.Width = width;            webBrowser.Height = height;            Bitmap bitmap = new System.Drawing.Bitmap(width, height);            webBrowser.DrawToBitmap(bitmap, new System.Drawing.Rectangle(0, 0, width, height));            //设置图片文件保存路径和图片格式,格式可以自定义            string filePath = AppDomain.CurrentDomain.BaseDirectory + "../../SaveFIle/" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".png";            bitmap.Save(filePath, System.Drawing.Imaging.ImageFormat.Png);        }        private void button1_Click(object sender, EventArgs e)        {            ConvertToImg();        }    }
复制代码

上面这种方法是解析指定URL地址的HTML,然后转换为图片。当然,也可以直接写一些HTML标签。如下:

复制代码
public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        WebBrowser webBrowser = null;        public void ConvertToImg()        {            string html = "<div><table border = \"1\" cellspacing = \"0\" cellpadding = \"3\" style = \"text-align:center;\"><tr><th style = \"width:60px;\">字段1</th><th style = \"width:60px;\">字段2</th><th style = \"width:60px;\">字段3</th></tr><tr style = \"color:green;\"><td>小明</td><td>22</td><td>185</td></tr><tr style = \"color:red;\"><td>小青</td><td>21</td><td>170</td></tr></table></div>";            webBrowser = new WebBrowser();            //是否显式滚动条            webBrowser.ScrollBarsEnabled = false;            //加载 html            webBrowser.DocumentText = html;                        //页面加载完成执行事件            webBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser_DocumentCompleted);        }        private void webBrowser_DocumentCompleted(object sender, EventArgs e)//这个就是当网页载入完毕后要进行的操作        {            //获取解析后HTML的大小            System.Drawing.Rectangle rectangle = webBrowser.Document.Body.ScrollRectangle;            int width = rectangle.Width;            int height = rectangle.Height;            //设置解析后HTML的可视区域            webBrowser.Width = width;            webBrowser.Height = height;            Bitmap bitmap = new System.Drawing.Bitmap(width, height);            webBrowser.DrawToBitmap(bitmap, new System.Drawing.Rectangle(0, 0, width, height));            //设置图片文件保存路径和图片格式,格式可以自定义            string filePath = AppDomain.CurrentDomain.BaseDirectory + "../../SaveFIle/" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".png";            bitmap.Save(filePath, System.Drawing.Imaging.ImageFormat.Png);        }        private void button1_Click(object sender, EventArgs e)        {            ConvertToImg();        }    }
复制代码

 

然后把图片转换为PDF,这里需要用到 iTextSharp.dll 这个组件。

复制代码
public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        WebBrowser webBrowser = null;        public void ConvertToImg()        {            string html = "<div><table border = \"1\" cellspacing = \"0\" cellpadding = \"3\" style = \"text-align:center;\"><tr><th style = \"width:60px;\">字段1</th><th style = \"width:60px;\">字段2</th><th style = \"width:60px;\">字段3</th></tr><tr style = \"color:green;\"><td>小明</td><td>22</td><td>185</td></tr><tr style = \"color:red;\"><td>小青</td><td>21</td><td>170</td></tr></table></div>";            webBrowser = new WebBrowser();            //是否显式滚动条            webBrowser.ScrollBarsEnabled = false;            //加载 html            webBrowser.DocumentText = html;                        //页面加载完成执行事件            webBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser_DocumentCompleted);        }        private void webBrowser_DocumentCompleted(object sender, EventArgs e)//这个就是当网页载入完毕后要进行的操作        {            //获取解析后HTML的大小            System.Drawing.Rectangle rectangle = webBrowser.Document.Body.ScrollRectangle;            int width = rectangle.Width;            int height = rectangle.Height;            //设置解析后HTML的可视区域            webBrowser.Width = width;            webBrowser.Height = height;            Bitmap bitmap = new System.Drawing.Bitmap(width, height);            webBrowser.DrawToBitmap(bitmap, new System.Drawing.Rectangle(0, 0, width, height));            //设置图片文件保存路径和图片格式,格式可以自定义            string filePath = AppDomain.CurrentDomain.BaseDirectory + "../../SaveFIle/" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".png";            bitmap.Save(filePath, System.Drawing.Imaging.ImageFormat.Png);            //创建PDF            FileStream fileStream = new FileStream(AppDomain.CurrentDomain.BaseDirectory + "../../SaveFIle/" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".pdf", FileMode.Create);            byte[] result = CreatePDF(bitmap, width, height);            fileStream.Write(result, 0, result.Length);            fileStream.Close();            fileStream.Dispose();        }        private void button1_Click(object sender, EventArgs e)        {            ConvertToImg();        }        public byte[] CreatePDF(Bitmap bitmap, int width, int height)        {            using (MemoryStream ms = new MemoryStream())            {                Document doc = new Document(new iTextSharp.text.Rectangle(0, 0, width, height), 3, 3, 3, 3);    // 左右上下                PdfWriter writer = PdfWriter.GetInstance(doc, ms);                writer.CloseStream = false;                doc.Open();                iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(bitmap, System.Drawing.Imaging.ImageFormat.Png);                img.ScalePercent(100);      // 放缩比例                doc.Add(img);       // 添加图片对像                doc.Close();                return ms.ToArray();            }        }    }
复制代码

不过这种生成图片之后再转成PDF,会造成像素的丢失,所以看起来要比图片模糊一点。

 

还有一种办法就是直接生成PDF,这里需要安装 ABCpdf。不过,这个是收费的。。。

复制代码
public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        public void ConvertToPDF()        {            string html = "<div><table border = \"1\" cellspacing = \"0\" cellpadding = \"3\" style = \"text-align:center;\"><tr><th style = \"width:60px;\">字段1</th><th style = \"width:60px;\">字段2</th><th style = \"width:60px;\">字段3</th></tr><tr style = \"color:green;\"><td>小明</td><td>22</td><td>185</td></tr><tr style = \"color:red;\"><td>小青</td><td>21</td><td>170</td></tr></table></div>";            //创建一个Doc对象            Doc doc = new Doc();            //Rect默认是文档整个页面大小,这里的Inset表示将Rect左右留出15的空白,上下留出20的空白            doc.Rect.Inset(15, 20);            //直接设置html            int docID = doc.AddHtml(html);            //设置URL            //int docID = doc.AddImageUrl("http://www.baidu.com");            //设置字体            doc.AddFont("Arial");            while (true)            {                //判断是否还有内容                if (!doc.Chainable(docID))                {                    break;                }                //如果还有内容就添加一页                doc.Page = doc.AddPage();                //根据ID添加内容并返回页面上该内容对应的新ID                docID = doc.AddImageToChain(docID);            }            string filePath = AppDomain.CurrentDomain.BaseDirectory + "../../SaveFIle/" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".pdf";            doc.Save(filePath);            doc.Clear();            doc.Dispose();        }        private void button1_Click(object sender, EventArgs e)        {            ConvertToPDF();        }            }
复制代码
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 如果被乌龟咬了怎么办 宝宝被乌龟咬了怎么办 上高中了偏文怎么办 上高中了很烦该怎么办 螳螂生完孩子后怎么办 小区门禁卡丢了怎么办 开门感应卡坏了怎么办 我的螃蟹生卵了怎么办 剑三账号被冻结怎么办 疤痕留下的红印怎么办 马桶刷子沾屎了怎么办 马桶上水管堵了怎么办 孕妇吃了姑娘果怎么办 出差被领导睡了怎么办 智融财富 跑路了怎么办 秒钱要是跑路了怎么办 新买的皮衣皱了怎么办 话说多了伤元气怎么办 话说多了嗓子哑怎么办 桂附地黄丸上火怎么办 乐视倒闭了会员怎么办 汽车上沾了水泥怎么办 汽车上的水泥点怎么办 小米4c启动不了怎么办 被骗取验证码后怎么办 电脑深度睡眠了唤醒不了怎么办 树脂镜片磨花了怎么办 详情页跳出率高怎么办 u盘拒绝访问怎么办win7 u盘洗了拒绝访问怎么办 u盘拒绝访问怎么办xp u盘被拒绝访问怎么办 ⅹp系统经常假死怎么办 公司末位淘汰制,怎么办 梦三国2掉帧怎么办 玩英雄联盟掉帧怎么办 自酿红酒酸了怎么办 自酿葡萄酒不甜怎么办 酿的葡萄酒酸了怎么办 自酿葡萄酒过甜怎么办? 做的葡萄酒太甜怎么办