使用Google Apps脚本,我填写了一个html模板,然后以pdf格式发送(通过传真和/或电子邮件)。该模板包括一个带有问题/答案的两列表格。
如果有足够的行,则该表会在pdf中的各个页面之间中断,并且该页面中断通常发生在单元格的中间;我想避免这种情况。
我尝试break-inside: avoid;
在<tr>
和<td>
元素中都使用,但没有效果。
这是模板:
<table style="border-collapse: collapse; border: 1px solid black; table-layout: fixed; width: 100%;">
<tbody>
<tr>
<th style="border: 1px solid black; width: 30%; padding: 5px;">Question</th>
<th style="border: 1px solid black; width: 70%; padding: 5px;">Response</th>
</tr>
<? rows.forEach(function(row){ ?>
<tr style="break-inside: avoid;">
<td style="break-inside: avoid; border: 1px solid black; padding: 5px; line-height: 1.5rem;"> <?= row.question ?> </td>
<td style="break-inside: avoid; border: 1px solid black; padding: 5px; line-height: 1.5rem;"> <?!= row.answer ?> </td>
</tr>
<? }) ?>
</tbody>
</table>
这是将其转换为pdf的Apps脚本代码:
var html = '<h3>' + subject + '</h3>'
var tableTemplate = HtmlService.createTemplateFromFile('response-table-template')
tableTemplate.rows = rows;
html += tableTemplate.evaluate().getContent();
var blob = Utilities.newBlob(html, MimeType.HTML, subject).getAs(MimeType.PDF);
然后将blob
其附加到电子邮件/传真。除我的问题外,所有其他方法都工作正常:有没有办法避免破坏页面上的表行?可能是将html转换为pdf的又一种尊重break-inside
属性的方法吗?还是将html blob转换为pdf时Apps Script会尊重的html / css解决方案?
通过实验,我发现Utilities.newBlob(html, MimeType.HTML, subject).getAs(MimeType.PDF)
将尊重page-break-inside: avoid;
(不是break-inside: avoid;
),但只有当它应用于整个表。因此,我不得不将每个表行都视为一个单独的表。此版本的html模板解决了该问题:
<table style="border-collapse: collapse; border: 1px solid black; table-layout: fixed; width: 100%;">
<tbody>
<tr>
<th style="border: 1px solid black; width: 30%; padding: 5px;">Question</th>
<th style="border: 1px solid black; width: 70%; padding: 5px;">Response</th>
</tr>
</tbody>
</table>
<? rows.forEach(function(row){ ?>
<table style="page-break-inside: avoid; border-collapse: collapse; border: 1px solid black; table-layout: fixed; width: 100%;">
<tbody>
<tr>
<td style="width: 30%; border: 1px solid black; padding: 5px; line-height: 1.5rem;"> <?= row.question ?> </td>
<td style="width: 70%; avoid; border: 1px solid black; padding: 5px; line-height: 1.5rem;"> <?!= row.answer ?> </td>
</tr>
</tbody>
</table>
<? }) ?>
作为记录,先转换为Google Doc然后转换为pdf并不能解决问题。看来Google文档还允许表格单元格在页面之间进行拆分。但是,将数据写入Google表格然后以pdf格式下载确实可以防止跨页破坏单元格;表格似乎会自动处理此问题,因此这是另一种解决方案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句