相关文章推荐
public static class HtmlToPdfHelper private static readonly string _fileDir = "htmlToPdf"; private static readonly string _savePath = System.Web.Hosting.HostingEnvironment.MapPath("/" + _fileDir); private static IConverter _converter = null; //官方要求在程序生命周期内,只能实例化一次 private static string _domainUrl; /// /// 获取当前站点域名 /// /// public static string DomainUrl Uri uri = HttpContext.Current.Request.Url; _domainUrl = uri.Scheme + "://" + uri.Host; if (!uri.IsDefaultPort) _domainUrl += ":" + uri.Port; return _domainUrl; static HtmlToPdfHelper() _converter = new ThreadSafeConverter( new RemotingToolset( new WinAnyCPUEmbeddedDeployment( new TempFolderDeployment()))); //_converter.Begin += ConverterOnBegin; //_converter.PhaseChange += ConverterOnPhaseChange; //_converter.ProgressChange += ConverterOnProgressChange; //_converter.Finish += ConverterOnFinish; _converter.Warning += new EventHandler((o, w) => Console.WriteLine("HtmlToPdfHelper类,html转换PDF,产生警告信息:" + w.WarningMessage); _converter.Error += new EventHandler((o, e) => Console.WriteLine("HtmlToPdfHelper类,html转换PDF,产生错误信息:" + e.ErrorMessage); /// /// 转换为pdf字节 /// /// /// private static byte[] Filing(IDocument doc) byte[] result = _converter.Convert(doc); return result; /// /// 构建PDF服务器访问地址 /// /// /// private static string BuildUrl(string pdfName) return $@"{DomainUrl}/{_fileDir}/{pdfName}.pdf"; /// /// 构建PDF保存路径 /// /// /// private static string BuildSaveSrc(string pdfName) return $@"{_savePath}\{pdfName}.pdf"; /// /// 查找已转换的PDF文件 /// /// 已保存PDF名称 /// 返回保存Url地址 private static string FindSaveHtmlPdf(string pdfName) //把文件读进文件流 var fileSrc = BuildSaveSrc(pdfName); if (!File.Exists(fileSrc)) return string.Empty; return BuildUrl(pdfName); /// /// 保存已转换的PDF文件 /// /// PDF文件名 /// 保存字节集 /// 保存成功返回url private static string SaveHtmlToPdfFile(string fileName, byte[] bf) var path = _savePath; if (!Directory.Exists(path)) Directory.CreateDirectory(path); System.IO.File.WriteAllBytes(BuildSaveSrc(fileName), bf); return BuildUrl(fileName); /// /// 根据类型转换PDF为字节 /// /// 保存文档 /// 保存的类型 /// private static byte[] BuildDocumentByType(string document, EHtmlToPdfDocumentType type) byte[] saveBuffer = null; if (type == EHtmlToPdfDocumentType.HtmlUrl) saveBuffer = ConvertHtmlUrlToPDF(document); else if (type == EHtmlToPdfDocumentType.HtmlText) saveBuffer = ConvertHtmlTextToPDF(document); return saveBuffer; /// /// 转换htmltext为PDF /// /// html文档内容 /// public static byte[] ConvertHtmlTextToPDF(string htmlText) if (string.IsNullOrWhiteSpace(htmlText)) new ArgumentNullException("htmlText", "html的内容不能为空"); var document = new HtmlToPdfDocument GlobalSettings = { }, Objects = { new ObjectSettings { HtmlText = htmlText, WebSettings =new WebSettings DefaultEncoding="UTF-8", LoadImages=true, var result = _converter.Convert(document); return result; /// /// 转换htmlUrl为PDF /// /// html文档内容 /// public static byte[] ConvertHtmlUrlToPDF(string htmlUrl) if (string.IsNullOrWhiteSpace(htmlUrl)) new ArgumentNullException("htmlUrl", "html的Url地址不能为空"); var doc = new HtmlToPdfDocument(); doc.Objects.Add(new ObjectSettings { PageUrl = htmlUrl }); byte[] result = Filing(doc); return result; /// /// 获取Html转换后的PDF文件Url(如果文件不存在,并先执行保存,在返回url地址) /// /// 要保存PDF名称 /// 要保存的Hmtl文档内容,(例如,htmlTXT,htmlurl) /// 保存的type类型 /// 是否覆盖(默认不覆盖) /// public static string GetHtmlToPdfSaveUrl(string pdfName, string document, EHtmlToPdfDocumentType type, bool IsCover = false) string pdfSaveUrl = FindSaveHtmlPdf(pdfName); if (string.IsNullOrEmpty(pdfSaveUrl) || IsCover) //获取转换成功后PDF字节 byte[] saveBuffer = BuildDocumentByType(document, type); //返回保存成功后PDF文件url return SaveHtmlToPdfFile(pdfName, saveBuffer); return pdfSaveUrl; /// /// 下载Html转换后的PDF文件字节流(如果文件不存在,并先执行保存,在返回下载字节流) /// /// 要保存PDF名称 /// 要保存的Hmtl文档内容,(例如,htmlTXT,htmlurl) /// 保存的type类型 /// 是否覆盖(默认不覆盖) /// public static byte[] DownloadHtmlToPdf(string pdfName, string document, EHtmlToPdfDocumentType type, bool IsCover = false) byte[] saveBuffer = DownloadSaveHtmlToPdf(pdfName); if (saveBuffer == null || IsCover) //获取转换成功后PDF字节 saveBuffer = BuildDocumentByType(document, type); //保存PDF文件 SaveHtmlToPdfFile(pdfName, saveBuffer); return saveBuffer; return saveBuffer; /// /// 获取已存在服务器上的PDF文件字节 /// /// 文件名称 /// public static byte[] DownloadSaveHtmlToPdf(string pdfName) //把文件读进文件流 var fileSrc = BuildSaveSrc(pdfName); if (!File.Exists(fileSrc)) return null; FileStream fs = new FileStream(fileSrc, FileMode.Open); byte[] file = new byte[fs.Length]; fs.Read(file, 0, file.Length); fs.Close(); return file; /// /// 文档转换类型 /// public enum EHtmlToPdfDocumentType HtmlUrl = 0, HtmlText = 1,
 public string GetHtmlToPdf(string pdfName, string url)
            if (string.IsNullOrWhiteSpace(url))
                string[] arrs = new string[] { "http://www.baidu.com", "https://news.qq.com/", "https://www.sogou.com/" };
                var index = new Random().Next(0, arrs.Length);
                url = arrs[index];
            if (string.IsNullOrWhiteSpace(pdfName))
                pdfName = DateTime.Now.ToString("yyyyMMdd_HHmmss");
            var res = HtmlToPdfHelper.GetHtmlToPdfSaveUrl(pdfName, url, EHtmlToPdfDocumentType.HtmlUrl);
            return res;
 
推荐文章