Размещение холста внутри элемента Div - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь создать круг в itext 7 и затем поместить этот круг в нужное мне место в документе.

Документ выложен с использованием divs, и мне удалось создать круг, используя 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, я с радостью перейду на этот метод, если кто-то укажет мне на учебник или документацию, которой я могу следовать.

1 Ответ

0 голосов
/ 04 мая 2018

Если кто-то ищет простой способ сделать это, вы можете переопределить 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 и то же самое для любого текста, помещенного внутри круга.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...