盈彩体育注册(中国)有限公司
盈彩体育注册(中国)有限公司 您所在的位置:网站首页 盈彩体育注册(中国)有限公司 C# 将页面生成pdf文件(样式不缺失)

C# 将页面生成pdf文件(样式不缺失)

2024-05-06 14:35:59| 来源: 网络整理

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

一、使用TuesPechkin转pdf

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

 

代码

/// /// 将网页转为pdf文件 /// /// 文件路径/目录 /// 文件名 /// 网页url 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

 

 

 

 

 



【本文地址】 转载请注明 

最新文章

推荐文章

CopyRight 2018-2019 盈彩体育注册(中国)有限公司 版权所有 豫ICP备16040606号-1