SetNextRenderer不会触发IText7中Renderer的绘制方法 [英] SetNextRenderer Doesn't Trigger Draw Method For Renderer In IText7
问题描述
我有一个自定义的AreaBreak渲染器,如下所示:
I have a custom AreaBreak renderer shown in below :
protected internal class CustomAreaBreakRenderer: AreaBreakRenderer
{
public Document document { get; set; }
public CustomAreaBreakRenderer(AreaBreak areaBreak, Document document) : base(areaBreak)
{
this.document = document;
}
public override IRenderer GetNextRenderer()
{
document.Add(TableFactory.CreateLogoBlock());
return new CustomAreaBreakRenderer(areaBreak, document);
}
public override void Draw(DrawContext drawContext)
{
base.Draw(drawContext);
document.Add(TableFactory.CreateContentBlock());
}
}
我已将此渲染器设置为:
And I have set this renderer as :
var areaBreak = new AreaBreak();
var renderer = new CustomAreaBreakRenderer(areaBreak, document);
areaBreak.SetNextRenderer(renderer);
document.Add(areaBreak);
调试代码时,
GetNextRenderer()
方法正在触发,但Draw()
未触发.
GetNextRenderer()
method is triggering but Draw()
is not triggering.
我使用了另一个渲染器,例如CustomTableRenderers或CustomParagraphRenderers,我一直使用相同的方法,但是对于这一方法,我无法按预期使用渲染器.
I have used another renderers such as CustomTableRenderers or CustomParagraphRenderers and I always used the same approach but for this one, I cant use the renderer as expected..
请帮助..:)
注意:我尝试使用TableRenderer并成功,这似乎仅在AreaBreakRenderer中发生!
推荐答案
不应绘制AreaBreakRenderer
,其layout
方法始终返回NOTHING
.
The AreaBreakRenderer
is not supposed to be drawn, its layout
method always returns NOTHING
.
如果您想赶上下一页的事件并在发生这种情况时绘制一些东西,则应该自定义DocumentRenderer
.这是一个示例:
If you want to catch the event of going to the next page and draw something when that happens, you should customize your DocumentRenderer
instead. Here is an example:
private static class CustomDocumentRenderer extends DocumentRenderer {
public CustomDocumentRenderer(Document document) {
super(document);
}
@Override
protected LayoutArea updateCurrentArea(LayoutResult overflowResult) {
LayoutArea prevArea = currentArea != null ? currentArea.clone() : null;
LayoutArea newArea = super.updateCurrentArea(overflowResult);
if (prevArea == null || prevArea.getPageNumber() != newArea.getPageNumber()) {
document.add(new Paragraph("Hello"));
}
return newArea;
}
}
将自定义渲染器插入其中很容易:
Plugging that custom renderer in is easy:
Document doc = new Document(pdfDoc);
doc.setRenderer(new CustomDocumentRenderer(doc));
这篇关于SetNextRenderer不会触发IText7中Renderer的绘制方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!