乐于分享
好东西不私藏

HTML转PDF实践

HTML转PDF实践
一、实践中.net后台操作PDF,使用aspose.pdf较多,但操作html转pdf时,遇到诸多问题:
        publicstaticvoidHtml2Pdf(string htmlName, string pdfName, string bmpPath)//转换Html文件为PDF        {            HtmlLoadOptions htmlOptions = new HtmlLoadOptions(FunCls.GetMapPath(bmpPath));//bmpPath指图片所在目录,若不指定将不显示图片            Document doc = new Document(FunCls.GetMapPath(htmlName), htmlOptions);            doc.Save(FunCls.GetMapPath(pdfName));        }
有些文章说,必须指定css目录,经实践,不指定也可以
1、html效果
2、效果
明显感觉被压缩了,一些高度没有起作用,经查资料aspose.pdf对min-height敏感,对height不敏感,修改css
@page {    size: A4;    margin0;}body {    margin-left0px;    margin-right0px;}TABLE {    font-size14px;    font-family"SimSun""Microsoft YaHei""Arial Unicode MS", sans-serif !important;    border0px;    border-color#000000;    margin0px;    border-collapse: collapse;    border-spacing0;    table-layout: fixed;    word-break: break-all;    word-wrap: break-word;    width100% !important;    max-width700px;    margin0 auto;}    table td {        padding0;        border-collapse: collapse;    }.jydw {    font-size18px;    font-weight: bold;    height35px;    min-height35px;    text-align: center;}.wtht {    font-size22px;    font-weight: bold;    height20px;    min-height20px;    text-align: center;}.no {    font-weight: bold;    font-size16px;    height30px;    min-height30px;    width125px;}
min-height都是后加的,显示效果
高度合适了,但对齐方式不对了
3、其他方法
网上说的,经测试也不起作用
    <tr>        <tdvalign="middle"style="height: 44px; min-height: 44px; vertical-align: middle;”>委托单位名称</td>        <td valign="middlestyle="height: 44px; min-height: 44px; vertical-align: middle;"></td>    </tr>
至于转换后利用aspose.word动态调整的方式没有采用,因为还是希望适合于各种HTML,不能有太多限制。
二、实在没招了,找找其他的工具,经查询筛选,选定Select.HtmlToPdf,主要是免费无水印,虽然有5页限制,但可以满足日常需求。
1、安装
使用VS中的工具->NuGet管理包进行安装
安装后bin文件夹会有以下几个文件,缺一不可
若通过其它方式安装后(如直接下载copy),文件缺失或版本不一致时,可能出现下面的提示,解决方案是删除后重新安装即可
2、使用
using SelectPdf;///<summary>///函数定义///</summary>namespace Function{    public class SelectPdfCls//一些普通转换处理的函数    {        publicstaticvoidceshi()        {            HtmlToPdf converter = new HtmlToPdf();            PdfDocument doc = converter.ConvertUrl("http://localhost:00000/Files/Temp/26080000.html");            doc.Save(FunCls.GetMapPath("/Temp/test.pdf"));            doc.Close();        }    }}
3、效果
3.1 html效果
3.2 转后pdf效果
4 对照网页直接打印效果
打印生成的PDF效果如下:
感觉Select.HtmlToPdf会缩放整个页面,修改代码:
        public static void ceshi()        {            HtmlToPdf converter = new HtmlToPdf();            // 设置转换选项            converter.Options.PdfPageSize = PdfPageSize.A4;            converter.Options.PdfPageOrientation = PdfPageOrientation.Portrait;            converter.Options.WebPageWidth = 793;//默认1024            converter.Options.WebPageHeight = 0            PdfDocument doc = converter.ConvertUrl("http://localhost:64678/Files/Temp/26080000.html");            doc.Save(FunCls.GetMapPath("/Temp/test.pdf"));            doc.Close();        }
显示效果:
这个显示比较正常,为什么是793,看官方的解释