zoukankan      html  css  js  c++  java
  • NetCore Html转Image

    using System;
    using System.Diagnostics;
    using System.IO;
    using System.Text;
    
    namespace ConsoleApp_NetCore
    {
        class Program
        {
            static void Main(string[] args)
            {
                Index();
                Console.ReadKey();
            }
    
            static void Index()
            {
                HtmlConvertToImg("https://www.baidu.com", @"D:文件word123.jpg");
            }
            
            /// <summary>
            /// HTML文本内容转换为Img
            /// </summary>
            /// <param name="strHtml">HTML文本内容</param>
            /// <param name="savePath">Img文件保存的路径</param>
            /// <returns></returns>
            static bool HtmlTextConvertToImg(string strHtml, string savePath)
            {
                bool flag = false;
                try
                {
                    string htmlPath = HtmlTextConvertFile(strHtml);
    
                    flag = HtmlConvertToImg(htmlPath, savePath);
                    File.Delete(htmlPath);
                }
                catch
                {
                    flag = false;
                }
                return flag;
            }
    
            /// <summary>
            /// HTML转换为Img
            /// </summary>
            /// <param name="htmlPath">可以是本地路径,也可以是网络地址</param>
            /// <param name="savePath">PDF文件保存的路径</param>
            /// <returns></returns>
            static bool HtmlConvertToImg(string htmlPath, string savePath)
            {
                bool flag = false;
                CheckFilePath(savePath);
    
                ///这个路径为程序集的目录,因为我把应用程序 wkhtmltopdf.exe 放在了程序集同一个目录下
                string exePath = AppDomain.CurrentDomain.BaseDirectory.ToString() + "wkhtmltopdf.exe";
                exePath = @"C:UsersT480.nugetpackages
    etcorehtmltoimage1.0.1.4contentFilesany
    etstandard2.0wkhtmltoimage.exe";
                if (!File.Exists(exePath))
                {
                    throw new Exception("No application wkhtmltopdf.exe was found.");
                }
    
                try
                {
                    ProcessStartInfo processStartInfo = new ProcessStartInfo();
                    processStartInfo.FileName = exePath;
                    processStartInfo.WorkingDirectory = Path.GetDirectoryName(exePath);
                    processStartInfo.UseShellExecute = false;
                    processStartInfo.CreateNoWindow = true;
                    processStartInfo.RedirectStandardInput = true;
                    processStartInfo.RedirectStandardOutput = true;
                    processStartInfo.RedirectStandardError = true;
                    processStartInfo.Arguments = GetArguments(htmlPath, savePath);
    
                    Process process = new Process();
                    process.StartInfo = processStartInfo;
                    process.Start();
                    process.WaitForExit();
    
                    // 用于查看是否返回错误信息
                    //StreamReader srone = process.StandardError;
                    //StreamReader srtwo = process.StandardOutput;
                    //string ss1 = srone.ReadToEnd();
                    //string ss2 = srtwo.ReadToEnd();
                    //srone.Close();
                    //srone.Dispose();
                    //srtwo.Close();
                    //srtwo.Dispose();
    
                    process.Close();
                    process.Dispose();
    
                    flag = true;
                }
                catch
                {
                    flag = false;
                }
                return flag;
            }
    
            /// <summary>
            /// 获取命令行参数
            /// </summary>
            /// <param name="htmlPath"></param>
            /// <param name="savePath"></param>
            /// <returns></returns>
            static string GetArguments(string htmlPath, string savePath)
            {
                if (string.IsNullOrEmpty(htmlPath))
                {
                    throw new Exception("HTML local path or network address can not be empty.");
                }
    
                if (string.IsNullOrEmpty(savePath))
                {
                    throw new Exception("The path saved by the Img document can not be empty.");
                }
    
                StringBuilder stringBuilder = new StringBuilder();
                //stringBuilder.Append(" --crop-w 410 ");        //截图宽度410px
                //stringBuilder.Append(" --width 410 ");        //浏览器模拟宽度410px
                stringBuilder.Append(" --quality 100 ");         //图片质量(这个值越大,图片质量越高,当然文件也会比较大)
                stringBuilder.Append(" " + htmlPath + " ");       //本地 HTML 的文件路径或网页 HTML 的URL地址
                stringBuilder.Append(" " + savePath + " ");       //生成的文档的保存路径
                return stringBuilder.ToString();
            }
    
            /// <summary>
            /// 验证保存路径
            /// </summary>
            /// <param name="savePath"></param>
            static void CheckFilePath(string savePath)
            {
                string ext = string.Empty;
                string path = string.Empty;
                string fileName = string.Empty;
    
                ext = Path.GetExtension(savePath);
                if (string.IsNullOrEmpty(ext) || (ext.ToLower() != ".jpg" && ext.ToLower() != ".jpeg" && ext.ToLower() != ".png"))
                {
                    throw new Exception("Extension error:This method is used to generate Img files.");
                }
    
                fileName = Path.GetFileName(savePath);
                if (string.IsNullOrEmpty(fileName))
                {
                    throw new Exception("File name is empty.");
                }
    
                try
                {
                    path = savePath.Substring(0, savePath.IndexOf(fileName));
                    if (!Directory.Exists(path))
                    {
                        Directory.CreateDirectory(path);
                    }
                }
                catch
                {
                    throw new Exception("The file path does not exist.");
                }
            }
    
            /// <summary>
            /// HTML文本内容转HTML文件
            /// </summary>
            /// <param name="strHtml">HTML文本内容</param>
            /// <returns>HTML文件的路径</returns>
            static string HtmlTextConvertFile(string strHtml)
            {
                if (string.IsNullOrEmpty(strHtml))
                {
                    throw new Exception("HTML text content cannot be empty.");
                }
    
                try
                {
                    string path = AppDomain.CurrentDomain.BaseDirectory.ToString() + @"html";
                    if (!Directory.Exists(path))
                    {
                        Directory.CreateDirectory(path);
                    }
                    string fileName = path + DateTime.Now.ToString("yyyyMMddHHmmssfff") + new Random().Next(1000, 10000) + ".html";
                    FileStream fileStream = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
                    StreamWriter streamWriter = new StreamWriter(fileStream, Encoding.Default);
                    streamWriter.Write(strHtml);
                    streamWriter.Flush();
    
                    streamWriter.Close();
                    streamWriter.Dispose();
                    fileStream.Close();
                    fileStream.Dispose();
                    return fileName;
                }
                catch
                {
                    throw new Exception("HTML text content error.");
                }
            }
    
        }
    }
    

      

  • 相关阅读:
    deepin15.7挂载/home到单独的分区:
    Docker配置整理
    Docker安装方法整理
    在ArangoDB中实现connectedcomponents算法
    Blazor入手教程(十一)使用组件库AntDesign Blazor
    Blazor入手教程(十)部署安装
    Blazor入手教程(九)c#和js互相调用
    Blazor入手教程(八)布局Layout
    Blazor入手教程(七)表单
    Blazor入手教程(六)组件的生命周期
  • 原文地址:https://www.cnblogs.com/Mzg121584668/p/13131602.html
Copyright © 2011-2022 走看看