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 ;
                   }

解决后的效果

3171886-15beef891b6dc448.jpg
image

解析

其实这个样式(style)就是给 table,tr,td 等控件加上不可分页拆分的属性。从而保证整个控件的完整性,不被分割。比如整个table 不进行分页,当前页无法完整显示整个table 的时候,把整个table 移动到下一页显示即可。可参考GitHub 上关于分页特性 的介绍。也可以借鉴下相关issue

完美解决方案

上面的方式虽然解决了单个控件的分割问题,但我们可以看到标题和表格还是分开的。其实上面的解决方案只是个雏形版本,只是为了说明问题。
真正解决起来也很简单,只需要在标题和表格的父组件如div上设置page-break-inside: avoid ;属性即可。如果有多个类似的表格,可以为父组件指定一个类名(class),在class 里面设置page-break-inside: avoid ;属性。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值