根据ftl模板生成pdf业务文件

文章展示了如何用FTL文件定义一个HTML模板,该模板用于生成PDF文档。后台数据通过Java方法获取,并填充到模板中,然后利用CreatePDFUtil工具类创建PDF文件。模板包含项目名称、状态、发布日期等信息,并预留了签章图像位置。

1.定义ftl文件模板

<!DOCTYPE html>
<html lang="en">
 <head>
  <meta charset="UTF-8" />
  <title>开启情况说明</title>
  <style>
     @page{size:210mm 297mm;}
     *{
        margin: 0;
        padding: 0;
        box-sizing: border-box;
        color: black;
        font-family: SimSun;
     }
     body{
        font-family: SimSun;
     }
   /*html,body{
      margin:0;
      padding:0;
      color: black;
      font-family: SimSun;
   }*/
   .container{
      padding:0 60px;
   }
   .title{
      padding-top:3px;
      text-align:center;
   }
   .title>h1{
      font-weight:normal;
   }
  .content{
     line-height: 35px;
     font-family: SimSun;
     font-size: 18px;
  }
  .content p{margin:0;}
  .info{
     text-indent: 2em;
  }
  .date{
     float: right;
     position: relative;
  }
   .img-sign{
      width:4cm;
      height: 4cm;
      opacity: 0.75;
      margin-left: 20px;
      margin-top: -100px;
   }
  </style>
 </head&
### 使用FreeMarker生成PDF文件的方法 通过FreeMarker(FTL生成PDF文件的过程主要分为以下几个部分:创建HTML模板、填充数据到模板并渲染为HTML文档,以及将HTML文档转换为PDF格式。以下是具体实现方式: #### 1. 创建HTML模板 在使用FreeMarker生成PDF的过程中,通常会先设计一个HTML模板作为基础结构。这个HTML模板可以手动编写,也可以从Word文档或其他工具中导出。 例如,在参考资料中提到可以通过以下步骤获取HTML模板[^3]: - 在Microsoft Word中绘制所需的布局和样式。 - 将Word文档上传至在线转换工具,将其转化为HTML格式。 最终得到的HTML文件可以用作FreeMarker的模板文件,并保存为`.ftl`扩展名。 --- #### 2. 配置FreeMarker环境 为了加载和解析FTL模板文件,需要配置FreeMarker的相关设置。下面是一个简单的Java代码示例用于初始化FreeMarker环境: ```java import freemarker.template.Configuration; import freemarker.template.Template; Configuration cfg = new Configuration(Configuration.VERSION_2_3_30); cfg.setDirectoryForTemplateLoading(new File("path/to/templates")); cfg.setDefaultEncoding("UTF-8"); Template template = cfg.getTemplate("your-template.ftl"); ``` 上述代码片段展示了如何加载位于指定路径下的FTL模板文件,并设置了默认编码为UTF-8以支持中文字符显示[^5]。 --- #### 3. 填充数据并生成HTML内容 接下来,需要准备一组键值对形式的数据模型,并将其传递给模板引擎进行渲染。以下是具体的代码实现: ```java Map<String, Object> dataModel = new HashMap<>(); dataModel.put("title", "测试报告"); dataModel.put("content", "这是由FreeMarker生成的内容"); Writer out = new StringWriter(); template.process(dataModel, out); String htmlContent = out.toString(); // 渲染后的HTML字符串 ``` 这段代码定义了一个包含标题和正文的数据模型,并调用了`process()`方法将这些数据注入到模板中,从而生成完整的HTML内容。 --- #### 4. HTMLPDF 最后一步是利用第三方库(如HtmlConverter或iText)将上一步生成HTML内容转换成PDF格式。这里提供一种基于HtmlConverter的方式: ```java import com.itextpdf.html2pdf.HtmlConverter; import java.io.OutputStream; import java.io.ByteArrayInputStream; OutputStream outputStream = new FileOutputStream("output.pdf"); ByteArrayInputStream inputStream = new ByteArrayInputStream(htmlContent.getBytes(StandardCharsets.UTF_8)); Properties properties = new Properties(); properties.setProperty("baseUri", "file:///path/to/resources/"); // 设置资源目录以便处理图片等外部链接 HtmlConverter.convertToPdf(inputStream, outputStream, properties); // 转换为PDF ``` 以上代码实现了将内存中的HTML字符串写入目标PDF文件的功能[^2]。需要注意的是,如果HTML中有引用本地图片或者其他静态资源,则必须正确配置`baseUri`属性指向实际存在的资源位置。 --- #### 注意事项 - **字体嵌入**:为了避免因操作系统不同而导致字体缺失的情况发生,建议提前准备好所需字体文件并通过程序动态加载。 - **性能优化**:当批量生产大量PDF时,考虑缓存常用模板或将它们预编译存储于数据库中减少重复操作时间消耗。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值