如何使用Dinktopdf在.net core项目里将Html转成PDF

Dinktopdf  :   .Net Core对 wkhtmltopdf 库的封装, 使用Webkit引擎将html转换成pdf.

源码地址: https://github.com/rdvojmoc/DinkToPdf
 

使用比较简单,直接把github里的示例代码放到你的.net core项目里。

 

注意:要记得把libwkhtmltox库放到项目的根目录里,并在visual studio里设置“如果较新则复制“

  dll是window, so是linux, dylib应该是mac os

 

如果从github下载慢,你也可以从码云网站下载

 https://gitee.com/ofri/DinkToPdf

 

注: linux或docker容器需要安装 libgdiplus   否则会提示找不到libwkhtmltox

apt-get update

apt-get install libgdiplus

 

 

问题1: 生成的PDF里中文都显示成方框了

解决办法:

(1) 网页里要加上 

<meta charset="UTF-8" />

(2) 在DockerFile里加上字体安装脚本,如下

apt-get install fonts-wqy-microhei ttf-wqy-microhei fonts-wqy-zenhei ttf-wqy-zenhei

参考 https://github.com/wkhtmltopdf/wkhtmltopdf/issues/2886

 

  问题2: 生成的PDF里某些中文显示成方框

  解决办法

  笔者碰到过一个奇怪的问题,所有的中文都可以,但有几个字就是显示成方框,在网页上浏览也有点奇怪,那几个字看上去小一点。

后来查了下,判断可能是输入法问题,输入的中文实际编码不是UTF-8,  可以把显示成方框的文字删掉,重新编辑输入,确保在浏览器上看上去和其他字体一样。

  问题3: 如果是用javascript生成的页面,打印出来看不到

  解决办法

     有两种可能得原因:

       第一种: 因为wkhtmltopdf用的是QT webkit, 所以可能在你的浏览器上显示正常,但用QT webkit显示有错误,有个简单的判断方法,下载一个QT web browser  http://www.qtweb.net/

     

    用这个浏览器去显示你的网页,然后启动网页检查器看看有没有javascript的脚本错误,找到了,则修复javascript代码,使得兼容QT webkit

第二种 : 你的javascript脚本执行时间较慢,在wkhtmltopdf打印前还没有渲染完毕, 这里可以通过设置wkhtmltopdf的一个参数

--javascript-delay <msec>       Wait some milliseconds for javascript            
                                      finish (default 200)

参见 https://wkhtmltopdf.org/usage/wkhtmltopdf.txt   

这个参数的意思就是等浏览器内核加载页面完后一秒才触发打印

 那在DinkToPdf的C#代码里可以通过如下代码传入该参数

  代码示例(延迟1秒后打印)

 var objectSettings = new ObjectSettings()
     {
                Page = url
     };

      objectSettings.LoadSettings = new LoadSettings
      {
                    JSDelay = 1000
      }
           
     var doc = new HtmlToPdfDocument()
     {
                GlobalSettings = {
                ColorMode = ColorMode.Color,
                Orientation = Orientation.Portrait,
                PaperSize = PaperKind.A4,
                ImageDPI = imgDPI                
                },
                Objects = {
                   objectSettings 
                 }
     };
    var pdf = _converter.Convert(doc);

 

 

 

 

posted on 2021-02-24 10:18  omage  阅读(212)  评论(0编辑  收藏  举报