zoukankan      html  css  js  c++  java
  • .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>
  • 相关阅读:
    LeetCode子集问题
    面试题-求最大字典区间
    链表快速排序
    树的非递归遍历
    快速排序非递归实现
    leetcode217 python3 72ms 存在重复元素
    leetcode121 C++ 12ms 买股票的最佳时机 只能买卖一次
    leetcode1 python3 76ms twoSum 360面试题
    leetcode485 python3 88ms 最大连续1的个数
    leetcode119 C++ 0ms 杨辉三角2
  • 原文地址:https://www.cnblogs.com/qtiger/p/14133578.html
Copyright © 2011-2022 走看看