使用第三方开源库iText7.pdfHtml,将html和css转成pdf,官方:/en/demos/convert-html-css-to-pdf-free-online;
官方示例:
usingSystem.IO;usingiText.Html2pdf;namespaceWebsiteDemoPdfHtml
{classProgram
{private static string ORIG = "/uploads/input.html";private static string OUTPUT_FOLDER = "/myfiles/";static void Main(string[] args)
{string pdfDest = OUTPUT_FOLDER + "output.pdf";
HtmlConverter.ConvertToPdf(new FileStream(ORIG, FileMode.Open), newFileStream(pdfDest, FileMode.Create));
}
}
}
官方可以下载到详细的使用说明文档:
设置默认打印纸张大小:
var pdfDest = "hello.pdf";var pdfWriter = newPdfWriter (pdfDest);var pdf = newPdfDocument (pdfWriter);var pageSize = PageSize.A4; //设置默认打印纸张大小,css @page规则可覆盖这个
pdf.SetDefaultPageSize (pageSize);
支持css @page规则控制打印设置选项,例如css @page设置A3打印纸,横向打印,这些规规将覆盖上面的设置默认打印纸张大小:
@page{size:A3 landscape;
}
如果需要引入其他资源,比如插入图片,需要设置根目录,将资源文件放入根目录或子文件夹下:
var properties = newConverterProperties ();
properties.SetBaseUri ("wwwroot"); //设置根目录
默认不支持中文字体,需要修改默认字体提供者,使其支持系统字体:
var provider = new DefaultFontProvider (true, true, true); //第三个参数为True,以支持系统字体,否则不支持中文
properties.SetFontProvider (provider);
支持css @media规则,使其在不同设备上显示不同效果,比如在预览时使用Screen设备显示彩色效果,在打印时使用Print设备增强黑白效果:
var mediaDeviceDescription = new MediaDeviceDescription (MediaType.PRINT); //指当前设备类型,如果是预览使用SCREEN
mediaDeviceDescription.SetWidth (pageSize.GetWidth ());
properties.SetMediaDeviceDescription (mediaDeviceDescription);
最后是以html作为打印模板,加载数据,再转成pdf;
官方推荐的是使用XSL转换(xmlns:xsl="/1999/XSL/Transform"),将xml转换成html,但该示例目前仅支持java,c#找不到相关源码,并且该方式不支持模板预览,不方便用户修改模板:
所以还是推荐使用正则替换规则导入数据,下面是示例html:
@page{size:A4 landscape;
}ul{margin-left:0;padding-left:0;
}ul li{list-style:none;
}ul li:after{content:"";display:block;clear:both;
}ul li p{float:left;margin-left:2em;
}ul li p:first-child{margin-left:0;
}ul li p img{width:36px;height:36px;
}
使用第三方库iText7.pdfHtml,将Html转换成Pdf,以及如何以Html作为打印模板
{{ListOfNames}}
姓名:{{Name}}
年龄:{{Age}}
性别:{{Sex}}
itextdef将动态html转为pdf [C#]使用第三方开源库iText7.pdfHtml 将Html转换成Pdf 以及如何以Html作为打印模板...