Comment convertir du HTML en image ou PDF en C# ?

零下一度
Libérer: 2017-06-24 10:31:10
original
4449 Les gens l'ont consulté

La première étape consiste à convertir le HTML en images.

public partial class Form1 : Form
    {public Form1()
        {
            InitializeComponent();
        }

        WebBrowser webBrowser = null;public void ConvertToImg()
        {
            webBrowser = new WebBrowser();//是否显式滚动条webBrowser.ScrollBarsEnabled = false;//加载HTML页面的地址webBrowser.Navigate("");            //页面加载完成执行事件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();
        }
    }
Copier après la connexion
Afficher le code

La méthode ci-dessus consiste à analyser le HTML de l'adresse URL spécifiée, puis convertissez-le en image. Bien entendu, vous pouvez également écrire directement certaines balises HTML. Comme suit :

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;//加载 htmlwebBrowser.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();
        }
    }
Copier après la connexion
Afficher le code

Ensuite, convertissez l'image en PDF , Vous devez utiliser le composant iTextSharp.dll ici.

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;//加载 htmlwebBrowser.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);//创建PDFFileStream 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();
            }
        }
    }
Copier après la connexion
Afficher le code

Cependant, ce type d'image générée puis sa conversion en PDF entraîneront Pixelation perdue, donc ça a l'air un peu flou que l'image.

Une autre façon consiste à générer directement un PDF, où ABCpdf doit être installé. Cependant, cela est payant. . .

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);//直接设置htmlint docID = doc.AddHtml(html);//设置URL//int docID = doc.AddImageUrl("");//设置字体doc.AddFont("Arial");while (true)
            {//判断是否还有内容if (!doc.Chainable(docID))
                {break;
                }//如果还有内容就添加一页doc.Page = doc.AddPage();//根据ID添加内容并返回页面上该内容对应的新IDdocID = 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();
        }
        
    }
Copier après la connexion
Afficher le code

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!