我正在使用itext7版本7.1.2和itext7.pdfhtml版本2.0.2从一些HTML中生成PDF,其中包含不得跨页面的元素(例如图形及其附带的文本)。
我尝试使用显式分页符(在我们的传统iTextSharp解决方案中成功使用(在<template>
<div class="container">
<table class="mt-3 table roboto table-stripped table-hover table-sm">
<thead class="thead-light">
<th>Name</th>
<th>Username</th>
<th>Profile</th>
<th class="text-center">Is manager</th>
</thead>
<tbody v-for="user in users">
<td v-text="user.name"></td>
<td v-text="user.username"></td>
<td v-text="user.display_name"></td>
<td class="text-center">
<button
class="letter-shadow btn-sm font-500 grey-darkest roboto letter-spacing"
:class="showRole">Activate
</button>
</td>
</tbody>
</table>
</div>
</template>
<script>
export default {
data() {
return {
users: [],
}
},
computed: {
showRole() {
// wanted to diff button colors here
}
},
mounted() {
axios.get('/api/users').then(response => this.users = response.data);
},
}
</script>
上使用包含不应分开的元素的任何元素))但这些根本不起作用尝试使用更优选的page-break-before: always
作为包含我不想跨越多个页面的元素的元素的样式。以下是代码的简化版本,该代码在您的&#34;我的文档&#34;中输出内联HTML作为PDF。路径...
page-break-inside: avoid
请注意,如果文档上没有设置边距,我就能够实现所需的行为;但是,业务要求是在文档上设置边距,那么我如何设置这些边距并保持using iText.Html2pdf;
using iText.Kernel.Geom;
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using System;
using System.Linq;
namespace IText7Html2PdfPageBreakTester
{
internal class Program
{
private static void Main(string[] args)
{
var html = @"<html>
<head>
</head>
<body>
<div style=""font-size: 60pt"">
Some Initial Text.
</div>
<div style=""page-break-inside: avoid; font-size: 120pt"">
This text should all be on the same page.
</div>
</body>
</html>";
var pdfFilePath = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Example PDF.pdf");
Console.WriteLine($"Converting example HTML to PDF and writing the PDF to: \"{pdfFilePath}\".");
using (var pdfWriter = new PdfWriter(pdfFilePath))
{
using (var pdfDocument = new PdfDocument(pdfWriter))
{
var converterProperties = new ConverterProperties();
pdfDocument.SetDefaultPageSize(PageSize.A4);
using (var document = new Document(pdfDocument))
{
//NOTE: If this line is commented then the "page-break-inside: avoid" style behaves as expected.
document.SetMargins(40, 40, 40, 40);
foreach (var element in HtmlConverter.ConvertToElements(html, converterProperties).OfType<IBlockElement>())
document.Add(element);
}
}
}
Console.WriteLine($"PDF written to: \"{pdfFilePath}\".");
}
}
}
行为?
我还尝试创建一个自定义page-break-inside: avoid
来解释我尝试使用的自定义ITagWorker
元素,而不是作为一种解决方法但是没有运气让<pageBreak/>
方法实际添加一个页。
补充:如果您使用以下内容替换ProcessorContext.GetPdfDocument().AddNewPage()
变量,则可以看到html
和page-break-before: always
都无法正常工作,无论边距是否已经过在文件上设置。
page-break-after: always