freemark 踩坑之旅-使用openhtmltopdf 将 html 转 为 pdf分页问题

3171886-86cd89ba79f9a523.jpg
image

概述

想要做出比较美观的pdf ,比较好的实现方式是使用html 转 pdf。后端生成html可以使用 freemark 去实现。由于很多时候freemark 中的数据是动态的,所以生成的html 也是动态的。很难排版,无法确定分页位置。那么在转pdf 的时候就面临分页的问题,特别是表格。一个表格被分割成两页,不仅影响美观,查看数据也不是很方便,如下所示

3171886-6612dd58e7edbe06.jpg
image

解决方案

在style 中添加如下样式

        table, tr, td, th, tbody, thead, tfoot {
            page-break-inside: avoid ;
                   }

解决后的效果

Spring Boot本身并不是一个直接用于将Freemarker模板生成的DOC文档换为PDF的工具,但它可以作为一个基础框架提供服务整合。通常的做法是结合其他第三方库,例如Thymeleaf、iText或PDFBox等,来进行这个换过程。 以下是一个简化的步骤: 1. **使用Freemarker生成DOC**: Spring Boot可以与Freemarker集成,创建模板并渲染HTML内容。例如,在Controller层中: ```java @GetMapping("/generate-doc") public ResponseEntity<Document> generateDoc(@PathVariable String name) { Map<String, Object> model = ...; // 模板数据 try (ResponseEntity<Document> response = new ResponseEntity<>(new FileSystemResource("templates/" + name + ".ftl"), HttpStatus.OK)) { return response; } catch (IOException e) { throw new RuntimeException(e); } } ``` 2. **换为PDF**: 利用iText、Apache PDFBox或者其他PDF生成库,接收HTML内容并将其化为PDF。在Controller层或者单独的服务类中: ```java @PostMapping("/convert-to-pdf") public ResponseEntity<ByteArrayResource> convertToPdf(@RequestBody String htmlContent) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); try (HtmlToPdfConverter converter = new HtmlToPdfConverter()) { converter.setBaseFont(FontFactory.getFont(FontFactory.TIMES_ROMAN)); converter.convertToPDF(baos, htmlContent); } catch (Exception e) { throw new RuntimeException(e); } return ResponseEntity.ok() .contentType(MediaType.APPLICATION_OCTET_STREAM) .body(new ByteArrayResource(baos.toByteArray())); } ``` 这里的`HtmlToPdfConverter`是一个假设的类,实际应使用相应的库提供的API。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值