利用ftl页面输出pdf时不确定数据时进行数组输出

博客提及 data 是二维数组,item 是循环后的一维数组,要按顺序进行输出,涉及数组操作相关信息技术内容。

data 为二维数组,item为循环后的一维数组,按顺序进行输出

后端 Java 使用 FreeMarker 模板 `warehouseReceipt.ftl` 输出 PDF 文件,可按以下步骤实现: ### 1. 添加依赖 在 `pom.xml` 中添加 FreeMarker 和 iText(用于生成 PDF)的依赖: ```xml <dependencies> <!-- FreeMarker --> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.31</version> </dependency> <!-- iText --> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.13.2</version> </dependency> </dependencies> ``` ### 2. 配置 FreeMarker 创建 FreeMarker 的配置对象,指定模板的加载路径: ```java import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateExceptionHandler; import java.io.File; import java.io.IOException; import java.util.Locale; public class FreeMarkerConfig { public static Configuration getConfig() throws IOException { Configuration cfg = new Configuration(Configuration.VERSION_2_3_31); cfg.setDirectoryForTemplateLoading(new File("path/to/templates")); cfg.setDefaultEncoding("UTF-8"); cfg.setLocale(Locale.CHINA); cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); return cfg; } } ``` ### 3. 准备数据模型 准备要替换模板中变量的数据: ```java import java.util.HashMap; import java.util.Map; public class DataModel { public static Map<String, Object> getData() { Map<String, Object> data = new HashMap<>(); data.put("variable1", "value1"); data.put("variable2", "value2"); return data; } } ``` ### 4. 生成 HTML 内容 使用 FreeMarker 模板和数据模型生成 HTML 字符串: ```java import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; import java.io.IOException; import java.io.StringWriter; import java.util.Map; public class HtmlGenerator { public static String generateHtml() throws IOException, TemplateException { Configuration cfg = FreeMarkerConfig.getConfig(); Template template = cfg.getTemplate("warehouseReceipt.ftl"); Map<String, Object> data = DataModel.getData(); StringWriter writer = new StringWriter(); template.process(data, writer); return writer.toString(); } } ``` ### 5. 将 HTML 转换为 PDF 使用 iText 将生成的 HTML 内容转换为 PDF 文件: ```java import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.pdf.PdfWriter; import com.itextpdf.tool.xml.XMLWorkerHelper; import java.io.*; public class PdfGenerator { public static void generatePdf(String htmlContent, String outputPath) throws DocumentException, IOException { Document document = new Document(); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(outputPath)); document.open(); InputStream is = new ByteArrayInputStream(htmlContent.getBytes()); XMLWorkerHelper.getInstance().parseXHtml(writer, document, is); document.close(); } } ``` ### 6. 主方法调用 在主方法中调用上述方法完成整个流程: ```java public class Main { public static void main(String[] args) { try { String htmlContent = HtmlGenerator.generateHtml(); PdfGenerator.generatePdf(htmlContent, "output.pdf"); System.out.println("PDF generated successfully!"); } catch (IOException | TemplateException | DocumentException e) { e.printStackTrace(); } } } ``` ### 注意事项 - 确保 `warehouseReceipt.ftl` 模板文件存在于指定的模板路径中。 - 模板中的变量需要与数据模型中的键对应。 - 可以根据实际需求调整数据模型和模板内容。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值