在itextpdf java中对齐单元格

在itextpdf java中对齐单元格,java,itext,pdf-generation,Java,Itext,Pdf Generation,我正在使用itextpdf创建带有表的pdf。在创建表格时,我需要将一些列向右对齐,但它现在工作正常,你们能帮我吗 我也尝试过谷歌搜索,但没有成功。我使用的是itextpdf 5.4版本 public void generateMonthlySubReport(String[][] StrArray,String dueMonth,int Amt){ try { Document document = new Document(); PdfWriter

我正在使用itextpdf创建带有表的pdf。在创建表格时,我需要将一些列向右对齐,但它现在工作正常,你们能帮我吗

我也尝试过谷歌搜索,但没有成功。我使用的是itextpdf 5.4版本

 public void generateMonthlySubReport(String[][] StrArray,String dueMonth,int Amt){
    try {

        Document document = new Document();
        PdfWriter.getInstance(document, new FileOutputStream(MON_SUB_FILE));         
        PdfPTable pt = new PdfPTable(StrArray[0].length); 
        pt.setTotalWidth(new float[]{ 55,120,360,140});
        pt.setLockedWidth(true);
        PdfPCell pcell = new PdfPCell();
        document.open();                        
        addKvLogo(document); 
        Chunk glue = new Chunk(new VerticalPositionMark());
        Paragraph p1 = new Paragraph("Monthly Subscription Report",catFont);
        p1.setAlignment(Element.ALIGN_CENTER);
        addEmptyLine(p1,2);
        document.add(p1);
        Paragraph p2 = new Paragraph("Month : "+dueMonth);
        p2.add(new Chunk(glue));
        p2.add("Per Member : Rs."+Amt);        
        addEmptyLine(p2,2);
        document.add(p2);

        for(int i=0;i<StrArray.length;i++){
            for(int j=0;j<StrArray[i].length;j++){ 
                pcell = new PdfPCell();
                if(i==0){
                    pcell.setBackgroundColor(BaseColor.LIGHT_GRAY);
                }else{
                    pcell.setBackgroundColor(BaseColor.WHITE);
                }                    
                pcell.setUseAscender(true);
                pcell.setMinimumHeight(22);
                pcell.setPaddingLeft(10);                    
                pcell.setHorizontalAlignment(Element.ALIGN_RIGHT);
                pcell.setVerticalAlignment(Element.ALIGN_MIDDLE);
                pcell.addElement(new Phrase(StrArray[i][j]));
                pt.addCell(pcell);
            }
        }            
        pt.setTotalWidth(PageSize.A4.getWidth()-(document.leftMargin()*2));
        pt.setLockedWidth(true);
        document.add(pt);
        document.close();
    } catch (Exception e) {
        e.printStackTrace();
    }        

}             `
public void generateMonthlySubReport(字符串[][]StrArray,字符串dueyound,int Amt){
试一试{
文档=新文档();
getInstance(文档,新文件输出流(MON_SUB_文件));
PdfPTable pt=新的PdfPTable(StrArray[0]。长度);
pt.setTotalWidth(新浮点[]{55120360140});
pt.设置锁定宽度(真);
PdfPCell pcell=新的PdfPCell();
document.open();
addKvLogo(文件);
块胶=新块(新垂直位置标记());
p1段=新段(“月度认购报告”,catFont);
p1.设置对齐(元素对齐\u中心);
addEmptyLine(p1,2);
文件。添加(p1);
第p2段=新的段落(“月份:”+dueMonth);
p2.添加(新块(胶));
p2.增加(“每个成员:卢比”+金额);
addEmptyLine(p2,2);
文件。添加(p2);

对于(int i=0;i而言,您正在将文本模式复合模式混合

这是文本模式:

pcell = new PdfPCell(new Phrase(StrArray[i][j]));
pcell.setHorizontalAlignment(Element.ALIGN_RIGHT);
pcell = new PdfPCell();
Paragraph p = new Parapgraph(StrArray[i][j])
p.setAlignment(Element.ALIGN_RIGHT);
pcell.addElement(p);
在这种情况下,单元格对齐将用于文本对齐

这是复合模式:

pcell = new PdfPCell(new Phrase(StrArray[i][j]));
pcell.setHorizontalAlignment(Element.ALIGN_RIGHT);
pcell = new PdfPCell();
Paragraph p = new Parapgraph(StrArray[i][j])
p.setAlignment(Element.ALIGN_RIGHT);
pcell.addElement(p);
在这种情况下,单元的对齐将被忽略,以利于元素的对齐

如何知道文本模式和复合模式之间的区别?


使用
addElement()时,iText会在
PdfPCell
中自动从文本模式切换到复合模式
方法。一旦您这样做,在单元格级别定义的某些属性将被忽略。这解释了您添加的内容没有正确对齐的原因。

有人投票结束了该问题,也投了反对票。但是,这是一个真正的问题,因此我投了赞成票。我建议以后阅读文档,然后嗯,因为我在回答中写的东西在很多地方都有记录。