使用Java iText在圆内插入多个段落和图像

时间:2019-02-26 15:29:27

标签: java itext

我想使用java itext生成CD的pdf标签。我已画出圆圈,但无法在圆圈内设置图像和多个段落。 以下是代码段。code snippet

 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 :(得分:0)

您为什么看不到您的文字?

您将填充颜色设置为“白色”:

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

(我显然没有您的图像,所以我使用一个简单的示例图像。)