使用canvasrenderer时如何管理itext 7中的溢出数据

我正在使用iText 7从保存在数据库中的html文件生成pdf文件。

我使用以下代码生成pdf,但是html文件中的表的一半被忽略了。我猜包含表的IBlockElement的大小大于画布的大小。

任何想法如何解决该问题?

List<IElement> elements = (List<IElement>)HtmlConverter.ConvertToElements(html);   
for (int k = 0; k < elements.Count; k++)
    {

        if (!renderer.IsFull())
        {
            canvas.Add((IBlockElement)elements[k]);
        }
        else
        {
            page = pdfDoc.AddNewPage();
            pdfCanvas = new PdfCanvas(page.NewContentStreamBefore(),page.GetResources(),pdfDoc);
            rectangle = new Rectangle(offset,offset,pageWidth,pageHeight);
            pdfCanvas.Rectangle(rectangle);
            pdfCanvas.Stroke();
            canvas = new iText.Layout.Canvas(pdfCanvas,pdfDoc,rectangle);
            renderer = new MyCanvasRenderer(canvas);
            canvas.SetRenderer(renderer);
        }
    }

MyCanvasRenderer的实现:

class MyCanvasRenderer : CanvasRenderer {
    protected bool full = false;

    public MyCanvasRenderer(Canvas canvas) : base(canvas) {
    }

    public override void AddChild(IRenderer renderer) {
        base.AddChild(renderer);
        full = true.Equals(GetPropertyAsBoolean(Property.FULL));
    }

    public bool IsFull() {
        return full;
    }
}
wuhaizhonggd 回答:使用canvasrenderer时如何管理itext 7中的溢出数据

Canvas类主要用于需要将元素添加到页面/ XObject上特定预定义区域的情况,而不是将内容溢出到下一个区域的情况。

由于上述用例只是将HTML转换为PDF,因此要使用的适当API是HtmlConverter的另一种方法,它允许您将HTML转换为{{ 1}}一行:

PDF

UPD :有关@Saeed的其他要求的说明

首页的页边距不同

CSS允许您使用HtmlConverter.ConvertToPdf(html,pdfWriter); 介质指定页边距,并且这些声明由@page拾取。这是页边距规范的示例,以及如何为第一页自定义它们:

pdfHTML

避免将表格拆分成多个页面

CSS具有@page { margin-top: 100pt; margin-left: 36pt; margin-right: 36pt; margin-bottom: 36pt; } @page:first { margin-top: 100pt; margin-left: 36pt; margin-right: 36pt; margin-bottom: 36pt; } 属性,该属性控制元素的页面方向外观。特别是,您对page-break-inside声明感兴趣,该声明可防止元素在页面之间分裂。

您可以将此声明应用于文档中的所有表:

page-break-inside: avoid;

或者,您可以创建自己的类并仅在必要时应用它:

table {
    page-break-inside: avoid;
}

第三种方法是将此样式应用于内联表:

.avoid-page-breaks {
    page-break-inside: avoid;
}

<table class="avoid-page-breaks">
...
</table>
本文链接:https://www.f2er.com/3138254.html

大家都在问