高效的合成PDF

高效的合成PDF

基于HTML+CSS的PDF批量生成工具

项目简介 open in new window 快速上手 open in new window 在线设计端 open in new window 在线设计端帮助 open in new window

设计方便

HTML+CSS+Thymeleaf 简便的构件(模板的最小单元)设计和数据绑定。

配置灵活

灵活的构件组合配置,增强构件的复用性,再加上数据规则的加持,降低复杂业务场景几何式增长的模板数量。

生成简便

三行代码直接生成。

动态特性

动态、静态模板组合,灵活页码,构件动态扩展和显示。

生僻字

可添加自定义字体,并可自动载入,支持生僻字显示。

控件的支持

二维码,条形码,PDF嵌入,标签目录。

开始使用

项目pom.xml引入

   <!-- ${rayin.version} 为版本号  -->
    <dependency>
        <groupId>ink.rayin</groupId>
        <artifactId>rayin-htmladapter-openhtmltopdf</artifactId>
        <version>${rayin.version}</version>
    </dependency>
    

创建构件

复制下方代码至.html文件中。

<!DOCTYPE html>
<html lang="zh-CN" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta charset="UTF-8"/>
    <style>
      
      body {
        /* 整体字体 与加载的字体名称一致 可涵盖大部分汉字,包括生僻字*/
        font-family: DFPSongW7,HanaMinB;
        line-height: 1.2;
        /*设置背景色*/
        /*background: #00FF00 ;*/
        /*设置背景图片 base64*/
        /*background-image:url(data:image/gif;base64,AAAA) no-repeat fixed top;*/
      }
      /* 表格样式 */
      table{
            border-collapse:collapse;
            /*width:100%;*/
            /* 分页设置 */
            -fs-table-paginate:paginate;
            /* 表格内容换页设置 */
            page-break-inside:auto;
        }
        tr { 
          /* 表格行避免分页被切断 */
          page-break-inside:avoid; 
          page-break-after:auto;
      }
        td{
            border: 1px solid #000000;
            /*padding:2px;*/
        }
        th{
            border: 1px solid #000000;
            /*padding:2px;*/
            /*text-align: center;*/
        }
      
      /*强制分页样式,可在块中追加分页样式,
      例如<div class="page_break"></div> 
      或 <div style="page-break-after:always;"></div>
      */
      .page_break { page-break-after:always;}
      
      /** 指定pdf纸张大小 **/
      @page {
        /* A4 大小 */
        size: A4 ;
        
        /* A4 大小 横向 */
        /* size: A4 landscape;*/
        
        /* 四边留白 1cm */
        margin: 1cm;
        
        /* 底部留白 1cm */
        /*margin-bottom: 1cm;*/
        
        /* page四周黑框 */
        /*border: thin solid black;*/
      }
    </style>
  </head>
  <body>
    <div style="text-align: center;">
      <!-- 具体内容 -->
      <span style="font-size: 12px;">HelloWorld 你好世界!</span>
    </div>
  </body>
</html>

单个构件PDF生成

    PdfGenerator pdfGenerator = new OpenHtmlGenerator();
    pdfGenerator.init();


    //单个构件生成,数据参数可以为空
    pdfGenerator.generatePdfFileByHtmlAndData(<html文件路径>, <json数据对象>, <生成的PDF文件的绝对路径>);

创建模板

{
  "templateName":"第一个模板",
  "elements":[
      {"elementPath":"构件1的路径"},
      {"elementPath":"构件2的路径"}
    ]
}

通过模板进行PDF生成

    PdfGenerator pdfGenerator = new OpenHtmlGenerator();
    pdfGenerator.init();


    //单个构件生成,数据参数可以为空
    pdfGenerator.generatePdfFileByTplConfigFile(<模板配置文件路径>, <json数据对象>, <生成的PDF文件的绝对路径>);

详细说明请参见帮助手册

帮助手册open in new window

收费版本

  • 支持css3(flex等)
  • 支持js
  • 支持echarts
foo

具体参见:收费版本说明open in new window

交流群

foo