dotnet使用DinkToPdf生成PDF文件
黑猫 2022-01-25 00:10 313

        uniapp项目中,若是直接使用JSPDF来实现PDF文档的生成会有很多问题,例如手机兼容性、不同类型手机呈现的样式不一致,导致最终生成的PDF并非自己想象中的那样而无法使用。

        本人之前在对接e签宝电子合同时就遇到上述的问题,很难做到不同品牌、不同性能的手机均可以做到正常生成PDF,于是乎我就将PDF转至后台来实现,前台只做uni-app的editor编辑功能,最终通过后台使用DinkToPdf来生成PDF文档,这样不仅不用考虑前端兼容性问题,而且生成速度也是相当的快。

添加依赖项:DinkToPdf

在NuGet搜索 Haukcode.DinkToPdf 添加依赖

 

在项目的StartUp文件上注入PDF服务

 public void ConfigureServices(IServiceCollection services){
     services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools()));
}

 

创建PDFService文件

#region Html生成PDF文件流
/// <summary>
/// Html生成PDF文件流
/// </summary>
/// <param name="htmlContent">html内容</param>
/// <param name="headerTitle">页眉标题</param>
/// <returns></returns>
public byte[] HtmlCreateToPDFByte(string htmlContent, string headerTitle)
{
     #region html为空的情况下返回空流
     if (htmlContent.IsNullorEmpty())
     {
         return null;
      }
     #endregion

     #region 创建pdf的大小类型
     var globalSettings = new GlobalSettings
      {
         ColorMode = ColorMode.Color,
         Orientation = Orientation.Portrait,
         PaperSize = PaperKind.A4,
         Collate = true,
         UseCompression = false,
         //Margins = new MarginSettings
             //{
             //    Top = 10,
             //    Left = 0,
             //    Right = 0,
          //},
          DocumentTitle = Guid.NewGuid().ToString(),
        };
        #endregion

        #region 创建pdf内容及页眉页尾等信息
        var objectSetting = new ObjectSettings
        {
            PagesCount = true,
            HtmlContent = htmlContent, //sb.ToString(),
            // Page = "www.baidu.com", //USE THIS PROPERTY TO GENERATE PDF CONTENT FROM AN HTML PAGE  这里是用现有的网页生成PDF
            //WebSettings = { DefaultEncoding = "utf-8", UserStyleSheet = Path.Combine(Directory.GetCurrentDirectory(), "assets", "styles.css") },
            WebSettings = { DefaultEncoding = "utf-8" },
            HeaderSettings = { FontName = "Arial", FontSize = 9, Right = headerTitle, Spacing = 3.0, Line = true }, //页眉
            FooterSettings = { FontName = "Arial", FontSize = 9, Center = "第[page]页 共[toPage]页", Spacing = 5.0 }, //页尾
            LoadSettings =
            {
                ZoomFactor=1.2 //PDF生成前将html整体放大的倍数
            }
        };
        #endregion

        //正式生成pdf
        var pdf = new HtmlToPdfDocument()
        {
            GlobalSettings = globalSettings,
            Objects = { objectSetting }
        };

        var file = _converter.Convert(pdf);
        return file;
}
#endregion

 

最后将上面的file以PDF的形式保存下来或者输出到页面上即可查看PDF了

 

本网站提供的文章除原创外均转载自其他网站,本网站只为更好的记录及学习技术经验
若网站内转载的文章侵犯了您的版权,请通过 意见反馈 告知本网站,我们会尽快删除相关信息
Copyright©2021-2021 kcBlog博客 版权所有 粤ICP备2021119076号 v1.0.0 栈谷统计