Вставьте несколько абзацев и изображений в круг, используя Java iText - PullRequest
0 голосов
/ 26 февраля 2019

Я хочу сгенерировать метку в формате pdf для CD, используя java itext.Я нарисовал круг, но не могу установить изображение и несколько абзацев внутри круга.Ниже приведен фрагмент кода. фрагмент кода

 String printingPath = "CD_label.pdf"; 
      Document document = new Document(new Rectangle(PageSize.A4));
      PdfWriter writer = PdfWriter.getInstance(document,new FileOutputStream(printingPath));
      document.open();

      PdfContentByte cb = writer.getDirectContent(); 
      cb.setRGBColorFill(0xFF, 0xFF, 0xFF);
      BaseColor colorval = new BaseColor(102,178,255);
      cb.setColorStroke(colorval); 
      cb.circle(300.0f, 650.0f, 150.0f);
      cb.circle(300.0f, 650.0f, 20.0f); 
      cb.stroke();


      //cb.setFontAndSize(BaseFont.createFont(BaseFont.HELVETICA,BaseFont.CP1257,BaseFont.EMBEDDED), 10); 
      //cb.beginText(); 
      //cb.resetRGBColorStroke();
      //cb.setTextMatrix(320, 420); 
      //cb.showText("Text inside cd");

     // ColumnText.showTextAligned(cb, Element.ALIGN_LEFT,new Phrase("Hello itext"),50, 700, 0); cb.endText();

      Image img = Image.getInstance("Symbol.png");
      img.setAbsolutePosition(270f, 740f); 
      img.scaleAbsolute(60, 34);

      document.close();

1 Ответ

0 голосов
/ 28 февраля 2019

Почему вы не видите свой текст?

Вы устанавливаете цвет заливки на БЕЛЫЙ:

cb.setRGBColorFill(0xFF, 0xFF, 0xFF);

Текст (обычно) рисуется с помощью заливка глифконтуры определены в некотором шрифте.Таким образом, ваш код для откомментированного текста

cb.setFontAndSize(BaseFont.createFont(BaseFont.HELVETICA,BaseFont.CP1257,BaseFont.EMBEDDED), 10); 
cb.beginText(); 
cb.resetRGBColorStroke();
cb.setTextMatrix(320, 420); 
cb.showText("Text inside cd");

ColumnText.showTextAligned(cb, Element.ALIGN_LEFT,new Phrase("Hello itext"),50, 700, 0);
cb.endText();

рисует текст ... в WHITE на WHITE ...

Если вы удалите эту инструкцию cb.setRGBColorFill (или выберите явно другой цвет заливки), вы увидите текст:

screen shot

(точка (320, 420) явновне круга с центром (300, 650) и радиусом 150, следовательно, ваш текст «Текст внутри CD» ...)

Еще одна проблема: ColumnText.showTextAligned запускает собственный текстовый объект, поэтомучтобы создать действительный PDF, вы должны переместить его после cb.endText():

cb.setFontAndSize(BaseFont.createFont(BaseFont.HELVETICA,BaseFont.CP1257,BaseFont.EMBEDDED), 10); 
cb.beginText(); 
cb.resetRGBColorStroke();
cb.setTextMatrix(320, 420); 
cb.showText("Text inside cd");
cb.endText();

ColumnText.showTextAligned(cb, Element.ALIGN_LEFT,new Phrase("Hello itext"),50, 700, 0);

Почему вы не видите свое изображение?

Потому что вы его не добавляете!

Если вы добавите его к PdfContentByte cb

    Image img = Image.getInstance("Symbol.png");
    img.setAbsolutePosition(270f, 740f); 
    img.scaleAbsolute(60, 34);
    cb.addImage(img);

, результат будет выглядеть следующим образом:

screen shot

(Очевидно, у меня нет вашего изображения, поэтому вместо него я использую простой пример изображения.)

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