首页 > 解决方案 > 使用 Java iText 在圆圈内插入多个段落和图像

问题描述

我想使用 java itext 为 CD 生成一个 pdf 标签。我画了圆圈,但我无法在圆圈内设置图像和多个段落。下面是代码片段。代码片段

 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();

标签: javaitext

解决方案


为什么看不到你的文字?

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

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 on WHITE中绘制文本...

如果您删除该cb.setRGBColorFill说明(或选择明显不同的填充颜色),您将看到您的文本:

截屏

(点 (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);

结果变成这样:

截屏

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


推荐阅读