.Net生成PDF流

需求是根据查询出来的数据动态生成一个PDF,包含图表、文本、分页等相关的基础元素,然后上传到OSS,共他人下载。先大概看下PDF的样式:

我的做法是根据动态数据构建一个HTML,然后转为PDF流(生成流直接上传OSS,不需要本地保存文件了),用的库文件是OpenHtmlToPdf。

 代码如下:

/// <summary>
/// HTML转为PDF
/// </summary>
/// <param name="pmPartnerStatisticsModel"></param>
/// <returns></returns>
public static byte[] GeneratePDFStream(DataTable data)
{
  string html = CreateHtml(data);
  using (WebClient wc = new WebClient())
   {
     byte[] pdfBytes = Pdf
        .From(html)
        .OfSize(PaperSize.A4)
         .WithoutOutline()
         .WithMargins(2.5.Centimeters())
         .Portrait()
         .Comressed()
         .Content();
      return pdfBytes;
  }
}

上述方法中有个CreateHtml方法,就是用来创建你想要的HTML,具体的按照自己设的的模板写就可以,这里说一下,让HTML转为PDF的时候,自定义分页。其实很简单,在HTML中,我们为每页加一个DIV,然后加上样式page-break-inside:avoid; 转为PDF的时候就可以分页了。举例如下:

<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<title>xx</title>
<style type="text/css">
.pdfpage{page-break-inside:avoid;}
</style>
</head>
<body>
<div class="pdfpage">第一页</div>
<div class="pdfpage">第二页</div>
</body>
</html>
原文地址:https://www.cnblogs.com/qtiger/p/14133578.html