当前位置: 首页 > 科技观察

NetCore实战:基于html生成pdf文件案例讲解

时间:2023-03-16 21:31:48 科技观察

一、WkHtmlToPdfDotNet简介WkHtmlToPdfDotNet是基于本地wkhtmltopdf包的.NETCore类库。它主要通过webkit引擎将html页面转换成pdf文件。并且支持在Windows、Docker、Linux、MacOSX上运行。主要功能是将在线URL转为pdf文件或直接将html代码转为pdf文件,支持css样式、图片等,导出的pdf文件与网站没有太大区别。今天就通过一个实际案例来给大家介绍下如何使用。有兴趣的朋友可以一起学习!官网:https://github.com/HakanL/WkHtmlToPdf-DotNet二、安装1、使用VisualStudio2019及以上版本创建.NETCore控制台程序。2.安装WkHtmlToPdfDotNet依赖包命令方式安装工具→NuGet包管理器→包管理器控制包安装命令如下:Install-PackageHaukcode.WkHtmlToPdfDotNet直接通过Nuget包搜索安装工具→NuGet包管理器→NuGet管理解决方案包3.实现代码usingSystem;usingSystem.IO;usingWkHtmlToPdfDotNet;namespaceHtmlToPdf{classProgram{//https://github.com/HakanL/WkHtmlToPdf-DotNet//安装依赖包Install-PackageHaukcode.WkHtmlToPdfDotNetstaticvoidMain(string[]args){//ConvertHtmlToPdf();ConvertUrlToPdf();}///

///基于html导出pdf///privatestaticvoidConvertHtmlToPdf(){varconverter=newBasicConverter(newPdfTools());//绑定转换时处理事件日志converter.PhaseChanged+=Converter_PhaseChanged;converter.ProgressChanged+=Converter_ProgressChanged;converter.Finished+=Converter_Finished;converter.Warning+=Converter_Warning;converter.Error+=转换器错误;//pdf样式设置vardoc=newHtmlToPdfDocument(){GlobalSettings={ColorMode=ColorMode.Color,Orientation=Orientation.Landscape,PaperSize=PaperKind.A4,},Objects={newObjectSettings(){PagesCount=true,HtmlContent=@"你好

测试

",WebSettings={DefaultEncoding="utf-8"},HeaderSettings={FontSize=9,Right="Page[page]of[toPage]",Line=false},FooterSettings={FontSize=9,Right="[toPage]的页面[page]"}}}};//转换为二进制byte[]pdf=converter.Convert(doc);//判断目录是否存在,不存在则创建if(!Directory.Exists("Files")){Directory.CreateDirectory("Files");}//保存文件使用(varstream=newFileStream(Path.Combine("Files",DateTime.UtcNow.Ticks.ToString()+".pdf"),FileMode.Create)){stream.写(pdf,0,pdf。长度);}}//////根据url导出pdf///privatestaticvoidConvertUrlToPdf(){varconverter=newBasicConverter(newPdfTools());//绑定转换事件日志时的处理converter.PhaseChanged+=Converter_PhaseChanged;converter.ProgressChanged+=Converter_ProgressChanged;converter.Finished+=Converter_Finished;converter.Warning+=Converter_Warning;converter.Error+=Converter_Error;//pdf样式vardoc=newHtmlToPdfDocument(){GlobalSettings={PaperSize=PaperKind.A3,//纸张类型Orientation=Orientation.Landscape,},//支持多个URLsObjects={newObjectSettings(){Page="http://baidu.com/",},newObjectSettings(){Page="https://www.163.com/dy/article/HJVSIG920511DTU9.html?clickfrom=w_yw_zgzz",}}};//转换成二进制byte[]pdf=converter.Convert(doc);//判断目录是否存在,不存在则创建if(!Directory.Exists("FilesHtml")){Directory.CreateDirectory("FilesHtml");}//保存文件使用(varstream=newFileStream(Path.Combine("FilesHtml",DateTime.UtcNow.Ticks.ToString()+".pdf"),FileMode.Create)){stream.Write(pdf,0,pdf.Length);}}//////转换产生错误日志输出//////////param>privatestaticvoidConverter_Error(objectsender,WkHtmlToPdfDotNet.EventDefinitions.ErrorArgse){Console.WriteLine([转换错误]{0}",e.Message);}//////转换产生警告日志输出//////////param>privatestaticvoidConverter_Warning(objectsender,WkHtmlToPdfDotNet.EventDefinitions.WarningArgse){Console.WriteLine("[Warning]{0}",e.Message);}//////转身完成日志输出/////////privatestaticvoidConverter_Finished(objectsender,WkHtmlToPdfDotNet.EventDefinitions.FinishedArgse){Console.WriteLine("Convert{0}",e.Success?"Success":"Failure");}//////转换进度日志输出/////////privatestaticvoidConverter_ProgressChanged(objectsender,WkHtmlToPdfDotNet.EventDefinitions.ProgressChangedArgse){Console.WriteLine("转换进度{0}",e.Description);}//////转换阶段日志输入/////////privatestaticvoidConverter_PhaseChanged(objectsender,WkHtmlToPdfDotNet.EventDefinitions.PhaseChangedArgse){控制台。WriteLine("阶段进度{0}-{1}",e.CurrentPhase,e.Description);三、运行效果基于在线url方式导出效果和直接拼接html方式导出效果