如何防止文本跨越由itext7.pdfhtml创建的PDF中的页面?

时间:2018-05-16 13:20:45

标签: c# html css itext7

我正在使用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()变量,则可以看到htmlpage-break-before: always都无法正常工作,无论边距是否已经过在文件上设置。

page-break-after: always

0 个答案:

没有答案