首页 > 解决方案 > 将画布放在 Div 元素内

问题描述

我正在尝试在 itext 7 中创建一个圆圈,然后将此圆圈放置在文档中我需要的任何位置。

该文档是使用 div 布局的,我已经设法使用PdfCanvas.

下面是我正在努力实现的一个片段,可能有更好的方法来做到这一点:

PdfDocument pdfDoc = new PdfDocument(writer);

  Document doc = new Document(pdfDoc);

  PdfPage pdfPage = pdfDoc.addNewPage();

  Div div = new Div();                        
  div.setBackgroundColor(Color.CYAN);
  div.setHeight(10.0F);
  div.add(new Paragraph(" ").setFont(PdfFontFactory.createFont(FontConstants.COURIER_BOLD)));  
  doc.add(div);

  PdfCanvas canvas = new PdfCanvas(pdfPage);  
   Color white = Color.WHITE;  
   Color black = Color.BLACK;

   canvas.setColor(white, true)
   .setStrokeColor(black) 
   .circle(15, 800, 8)      
   .fillStroke();     

   canvas.beginText()      
   .setFontAndSize(PdfFontFactory.createFont(FontConstants.COURIER_BOLD), 10)               
   .setColor(black, true)
   .moveText(15 - 3, 800 - 3)
   .showText("1")
   .endText();

  doc.close();  

如果有一种正确的方法可以将一些文本(数字)包裹在一个可以定位在 div 内的圆圈中,那么如果有人可以将我指向一个教程或一些我可以遵循的文档,我会很乐意改变这种方法。

标签: geometryitext7

解决方案


如果有人正在寻找一种简单的方法来做到这一点,那么您可以draw覆盖Div.

public class Circle extends Div
{
@Override
public IRenderer getRenderer()
{
    return new CircleRenderer(this);
}

private class CircleRenderer extends DivRenderer
{

    public CircleRenderer(final Circle circle)
    {
        super(circle);
        setPadding(PADDING);
    }


    @Override
    public void draw(final DrawContext drawContext)
    {
        final PdfCanvas canvas = drawContext.getCanvas();


        final Rectangle area = this.occupiedArea.getBBox();
        final float x = area.getX();
        final float y = area.getY();

        canvas.circle(x, y, 8);

        canvas.fillStroke();            

        super.draw(drawContext);
    }
}
}

绘制画布后,我需要对 x 和 y 位置进行一些校正,对于放置在圆圈内的任何文本也是如此。


推荐阅读