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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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>
 <body>
   <div class="container">
      <div class="title">
         <h1>开启情况说明</h1>
      </div>
      <#--<div class="content">
         <p>特此说明</p>
         <div class="date">
            <p>2020年07月09日08时32分</p>
            <p>(签章)</p>
            <img class="img-sign" src="C:\Users\tjs\Desktop\001.jpg" />
         </div>

      </div>-->
      <div class="content">
         <p>${purBuyName}:</p>
         <p>${saasFlagName!''}:</p>
         <p class="info">该项目于${(publishTime?string('yyyy年MM月dd日HH时mm分'))!''}。</p>
         <p>特此说明</p>
         <div class="date">
            <p>${(nowTime?string('yyyy年MM月dd日HH时mm分'))!''}</p>
            <p>${platform!''}(签章)</p>
            <img class="img-sign" src=""/>
         </div>
      </div>
   </div>
  
  </body>
</html>

2.后台数据获取

public StartHallDO setOpenFile(StartHallDO startHall, String quotationNumber) {
        String id = startHall.getId();
        StartHallDO startHallDO = startHallService.get(id);
        startHallDO.setCause(startHall.getCause());
        if (startHall.getOpenFailPdfFile() == null || "".equals(startHall.getOpenFailPdfFile())) {
            Map<String, Object> creatMap = getMap(startHallDO);
            String date = mkSysFile(id);
            String pdfFile = CreateFileConstants.PURCHASE + date + startHallDO.getId() + "/" + creatMap.get("purName").toString() + startHallDO.getSectionCode() + "标段-开启情况说明.pdf";//创建空白pdf
            String createPdfPash = commonConfig.getUploadPath() + pdfFile; //需要创建的pdf文件路径
            BufferedWriter bwpdf;
            try {
                bwpdf = new BufferedWriter(new FileWriter(createPdfPash));
                bwpdf.close();
                CreatePDFUtil.createPDF(creatMap, "/ftl/pdfOpenFail.ftl", createPdfPash);
                startHall.setOpenFailPdfFile("/files/" + pdfFile);
            } catch (IOException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return startHall;
    }

### Java 将 Word 模板转换为 PDF 的库和方法 #### 方法一:使用 Aspose.Words 库 Aspose.Words 是一种强大的文档处理库,支持多种操作,包括将 Word 文档转换为 PDF 文件。 安装 Aspose.Words JAR 包可以通过 Maven 命令完成: ```bash mvn install:install-15.8.0.jar -DgroupId=com.aspose -DartifactId=aspose-words -Dversion=15.8.0 -Dpackaging=jar -DgeneratePom=true ``` 以下是使用 Aspose.Words 进行 Word 到 PDF 转换的代码示例[^3]: ```java import com.aspose.words.*; public class WordToPdfConverter { public static void main(String[] args) throws Exception { Document doc = new Document("C:\\path\\to\\template.docx"); // 设置保存选项 PdfSaveOptions saveOptions = new PdfSaveOptions(); saveOptions.setPrettyFormat(true); // 执行转换并保存到指定路径 doc.save("C:\\path\\to\\output.pdf", saveOptions); System.out.println("Conversion completed successfully."); } } ``` #### 方法二:结合 FreeMarker 和 Aspose.Words 动态生成 Word 并转为 PDF 这种方法适用于需要根据模板动态填充数据的情况。FreeMarker 可用于生成带有占位符的内容,之后通过 Aspose.Words 替换这些占位符并将最终结果导出为 PDF。 对于图片和其他复杂元素(如复选框),可以先放置占位符,在后续步骤中用实际内容替代它们[^2]。 ```java // 示例代码片段展示如何加载模板、设置变量以及调用 Aspose.Words 完成转换过程 Template template = configuration.getTemplate("report_template.ftl"); StringWriter stringWriter = new StringWriter(); Map<String, Object> dataModel = Maps.newHashMap(); dataModel.put("imagePlaceholder", "base64_encoded_image_string"); template.process(dataModel, stringWriter); Document document = new Document(new ByteArrayInputStream(stringWriter.toString().getBytes())); document.save("final_output.pdf"); ``` 以上两种方式均能有效满足不同场景下的需求,无论是简单的静态文件转换还是复杂的动态报表生成功能都能得到良好支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值