SetNextRenderer不会触发IText7中Renderer的绘制方法 [英] SetNextRenderer Doesn't Trigger Draw Method For Renderer In IText7

查看:117
本文介绍了SetNextRenderer不会触发IText7中Renderer的绘制方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个自定义的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆