Java 在itext PdfPCell中使用文本绘制状态栏

Java 在itext PdfPCell中使用文本绘制状态栏,java,pdf,graphics,itext,2d,Java,Pdf,Graphics,Itext,2d,正在尝试在PdfCell中创建/绘制状态栏。(它将以不同的值显示在多个表的多文件页中。) 我应该在内存中创建一个图像并在单元格中设置它吗? 如果我想这样做,如何在内存中创建图像并将其发送到iText。我看到的所有样本都来自一个文件 iText库是否可以帮助您实际创建包含所有文本和附加行的状态栏。(两端的超长行..第一行顶部的数字0,最后一行顶部的数字1000…居中文本以显示状态“750/1000”。) 谢谢你的建议 正在添加更多信息。。 这是我到目前为止尝试的代码。不知道如何在2个单元格之间居中

正在尝试在PdfCell中创建/绘制状态栏。(它将以不同的值显示在多个表的多文件页中。)

我应该在内存中创建一个图像并在单元格中设置它吗? 如果我想这样做,如何在内存中创建图像并将其发送到iText。我看到的所有样本都来自一个文件

iText库是否可以帮助您实际创建包含所有文本和附加行的状态栏。(两端的超长行..第一行顶部的数字0,最后一行顶部的数字1000…居中文本以显示状态“750/1000”。)

谢谢你的建议

正在添加更多信息。。 这是我到目前为止尝试的代码。不知道如何在2个单元格之间居中显示文本(设置PaddingTop以推到较低的单元格没有做到这一点…)。 我还使用缩进来获取行顶部的文本。欢迎任何改进代码的想法

PdfPTableExt innerTable = new PdfPTableExt();

int finalScore = 750;
//PdfPTableExt rectTable = new PdfPTableExt(new int[] {1,1,1,1});
PdfPTableExt rectTable = new PdfPTableExt(new int[] {500,finalScore,1000-finalScore,500});

// Draw cell for padding and number     
Paragraph startParagraph = new Paragraph("0");      
startParagraph.setIndentationLeft(82);
PdfPCellExt startCell = new PdfPCellExt();
startCell.addElement(startParagraph);
startCell.setFixedHeight(25);
rectTable.addCell(startCell);   

PdfPCellExt topMiddle = new PdfPCellExt();
topMiddle.setColspan(2);

Paragraph middleParagraph = new Paragraph(Integer.toString(finalScore));    
middleParagraph.setAlignment(Element.ALIGN_CENTER);
middleParagraph.setPaddingTop(30);
topMiddle.addElement(middleParagraph);        
rectTable.addCell(topMiddle);   

Paragraph limitParagraph = new Paragraph("1000");
limitParagraph.setIndentationLeft(-15);    
PdfPCellExt limitCell = new PdfPCellExt();
limitCell.addElement(limitParagraph);
rectTable.addCell(limitCell);

rectTable.completeRow();

PdfPCellExt middle1 = new PdfPCellExt();
middle1.setFixedHeight(25);
middle1.setBorder(Rectangle.RIGHT);
middle1.setBorderColorRight(BaseColor.BLACK);    
rectTable.addCell(middle1);     

// Draw Rect
PdfPCellExt middle2 = new PdfPCellExt();
Paragraph numParagraph = new Paragraph("750");
numParagraph.setAlignment(Element.ALIGN_CENTER);
middle2.addElement(numParagraph);       

middle2.setBackgroundColor(BaseColor.ORANGE);
rectTable.addCell(middle2);    

PdfPCellExt middle3 = new PdfPCellExt();
middle3.setBackgroundColor(BaseColor.BLUE);
rectTable.addCell(middle3);        

PdfPCellExt middle4 = new PdfPCellExt();
middle4.setBorder(Rectangle.LEFT);
middle4.setBorderColorLeft(BaseColor.BLACK);    
rectTable.addCell(middle4);         

    rectTable.completeRow();

// Draw empty cell for bottom padding rects
PdfPCellExt bottom1 = new PdfPCellExt();
bottom1.setFixedHeight(25f);
rectTable.addCell(bottom1);
PdfPCellExt bottom2 = new PdfPCellExt();
rectTable.addCell(bottom2); 
PdfPCellExt bottom3 = new PdfPCellExt();
rectTable.addCell(bottom3);    
PdfPCellExt bottom4 = new PdfPCellExt();
rectTable.addCell(bottom4);    
rectTable.completeRow();        

PdfPCellExt rectCell = new PdfPCellExt();      
rectCell.addElement(rectTable);
innerTable.addCell(rectCell);        
PdfPCellExt只是一个包装类

public class PdfPCellExt extends PdfPCell{
    public PdfPCellExt() {
    super();
    this.setPadding(PdfPadding.None);
    this.setBorder(Rectangle.NO_BORDER);
    }
}

请解释为什么from不适合您。请查看并解释您的要求是如何不同的,以防我误解了这个问题。不要在没有代码的情况下发布关于堆栈溢出的问题。如果不知道从哪里开始,请阅读教程。请注意,类
PdfCell
是石器时代的iText版本的内部类。iText 5有一个名为
PdfPCell
的类,但是对iText 5的支持已经停止,取而代之的是对iText 7的支持。不过,在我之前的评论中提到的例子也适用于iText 5。这是我在2009年写的《iText在行动》第二版中的一个例子。你的文字描述很难理解,应该用(手绘或PPT制作的)图片代替。在内存中创建图像很容易,但如果您只需要一个单色矩形,则完全没有必要。请根据以上评论改进您的问题。描述问题,而不是你对如何解决问题的解释。创建状态栏不需要图像;绘制路径和形状(矢量数据,而不是光栅图像)要优雅得多,即使(尤其是)您希望状态栏具有渐变颜色。谢谢Bruno。这个例子给了我一些想法。我仍然不知道如何将文本放在单元格边缘或两个单元格之间的中心。我在这里添加示例代码以供参考。这是迈向理想方向的一步吗?