• C# 将html网页生成pdf


    将html文本或者html网页生成pdf,我常用的2种方式:TuesPechkin    wkhtmltopdf

    一、使用TuesPechkin转pdf

    首先引用TuesPechkin.dll,我使用的是1.0.3,也可以使用最新稳定版

     

    代码

          /// <summary>
            /// 将网页转为pdf文件
            /// </summary>
            /// <param name="filePath">文件路径/目录</param>
            /// <param name="fileName">文件名</param>
            /// <param name="url">网页url</param>
            public bool ConvertWebpageToPDF(string filePath, string fileName, string url)
            {
                if (Directory.Exists(filePath) == false)
                    Directory.CreateDirectory(filePath);
                try
                {
                    HtmlToPdfDocument htmlToPdfDocument = new HtmlToPdfDocument();
                    GlobalSettings globalSettings = new GlobalSettings();
                    globalSettings.ProduceOutline = new bool?(true);
    
                    //html网页内容的宽高
                    double width = 100; double.TryParse(txt_width.Text, out width);
                    double height = 120; double.TryParse(txt_height.Text, out height);
    
                    //设置pdf宽高
                    double proportion = 1.26;
                    width /= proportion;
                    height = Math.Floor(height / proportion);
                    string Width = width.ToString(); string Height = height.ToString();
                    globalSettings.PaperSize = new PechkinPaperSize(Width, Height);
    
                    //设置pdf文档四周空白边距
                    globalSettings.Margins.Top = 0;
                    globalSettings.Margins.Right = 0;
                    globalSettings.Margins.Bottom = 0;
                    globalSettings.Margins.Left = 0;
                    globalSettings.Margins.Unit = Unit.Centimeters;
                    string pageUrl = url;
                    ObjectSettings objectSettings = new ObjectSettings();
    
                    double value = 1;
                    objectSettings.HtmlText = string.Empty;
                    objectSettings.PageUrl = pageUrl;
                    objectSettings.LoadSettings.BlockLocalFileAccess = true;
                    objectSettings.LoadSettings.ZoomFactor = new double?(value);
                    objectSettings.WebSettings.PrintMediaType = new bool?(true);
                    objectSettings.WebSettings.PrintBackground = new bool?(false);
                    htmlToPdfDocument.GlobalSettings = globalSettings;
                    htmlToPdfDocument.Objects.Add(objectSettings);
                    IPechkin pechkin = Factory.Create();
                    byte[] array = pechkin.Convert(htmlToPdfDocument);
                    string path = string.Empty;
                    if (array == null)
                    {
                        return false;
                    }
    
                    path = Path.Combine(filePath, fileName);
                    using (FileStream fileStream = new FileStream(path, FileMode.Create))
                    {
                        fileStream.Write(array, 0, array.Length);
                        fileStream.Flush();
                        fileStream.Close();
    
                        FileStream fs = new FileStream(path, FileMode.Open);
                        byte[] file = new byte[fs.Length];
                        fs.Read(file, 0, file.Length);
                        fs.Close();
                        return true;
                    }
                }
                catch (Exception ex)
                {
                    return false;
                }
            }

     

     

    二、使用TuesPechkin转pdf

    wkhtmltopdf是一个插件,首先要下载https://wkhtmltopdf.org/downloads.html

    下载后有使用说明:需要使用cmd安装到本地目录

    代码:

    public void wkhtmltopdf(string filePath, string fileName, string url)
            {
                Process p = new Process();
                //wkhtmltopdf插件安装的地址
                string dllstr = AppDomain.CurrentDomain.BaseDirectory + "wkhtmltopdf\\wkhtmltopdf.exe";
                //string dllstr = "C:\\Windows\\System32\\wkhtmltopdf.exe";
                if (System.IO.File.Exists(dllstr))
                {
                    string savepath = Path.Combine(filePath, fileName);
                    p.StartInfo.FileName = dllstr;
    
                    StringBuilder paramsBuilder = new StringBuilder();
                    paramsBuilder.Append("--page-width " + txt_width.Text + "mm ");
                    paramsBuilder.Append("--zoom 1.2 ");
                    paramsBuilder.Append("--disable-smart-shrinking ");
                    paramsBuilder.Append("--page-height " + txt_height.Text + "mm ");
                    paramsBuilder.Append("--margin-bottom 0mm ");
                    paramsBuilder.Append("--margin-left 0mm ");
                    paramsBuilder.Append("--margin-right 0mm ");
                    paramsBuilder.Append("--margin-top 0mm ");
                    paramsBuilder.AppendFormat("\"{0}\" \"{1}\"", url, savepath);
                    p.StartInfo.Arguments = paramsBuilder.ToString();
                    //p.StartInfo.Arguments = " \"" + url + "\"  \"" + savepath + "\"";
    
                    p.StartInfo.UseShellExecute = false;
                    p.StartInfo.RedirectStandardInput = true;
                    p.StartInfo.RedirectStandardOutput = true;
                    p.StartInfo.RedirectStandardError = true;
                    p.StartInfo.CreateNoWindow = true;
    
                    p.Start();
                    p.WaitForExit();
                }
            }

    备注: 

    以上2种方法生成pdf效果都非常好,css也能完美支持。

    都是通过请求网页url,将整个网页生成pdf。

    如果你是客户端,只有html文本,没有网页。可以先用html文本在本地生成一个html文件,本地html文件也是可以生成的pdf的哦

    本地生成html文件方法可以看我另外一篇:

    https://www.cnblogs.com/liuzheng0612/p/16148963.html

     

     

     

     

    
    

     

  • 相关阅读:
    属性与字段的区别
    修改LVDS支持1024*600分辨率
    Altium designer 10如何设置标题栏
    嵌入式C开发人员的最好的0x10道笔试题
    进程线程及堆栈关系的总结
    GDB调试
    c语言
    如何使用autotools生成Makefile
    ubuntu NFS
    Ubuntu安装配置TFTP服务
  • 原文地址:https://www.cnblogs.com/liuzheng0612/p/16149034.html
Copyright © 2020-2023  润新知