2011-11-21 172 views
1

我有一个动态生成PDF的类, ,我有一个4-6列.. 在第二列描述中,一个名称是动态显示的, 它有大约20-40个字符..现在我想要一致地显示行高度.. 如果任何一个描述字符超过30个字符我必须显示所有行高度相等的高度(20f) 如果字符不超过并且结束低于30字符我必须显示所有行高(10f)。iText PDF动态生成

我该如何动态调整它? 这里是我的代码:

mainTable.addCell (PDFUtil.getBlankLine (20f)); 
float[] colsWidth = {0.5f,3.8f,0.9f,0.9f,1.3f,0.9f,1.3f,1.4f}; 
PdfPTable itemListTab = new PdfPTable(colsWidth); 

PdfPCell slNo = PDFUtil.getTableHeaderCell(PDFUtil.S_NO, 
     PDFUtil.getBoldFont()); 
PdfPCell itmDesc = PDFUtil.getTableHeaderCell(PDFUtil.ITEM_DESC, 
     PDFUtil.getBoldFont()); 
PdfPCell loose = PDFUtil.getTableHeaderCell(PDFUtil.LOOSE_QTY, 
     PDFUtil.getBoldFont()); 
PdfPCell full = PDFUtil.getTableHeaderCell(PDFUtil.FULL_QTY, 
     PDFUtil.getBoldFont()); 
PdfPCell unitPrc = PDFUtil.getTableHeaderCell(PDFUtil.QUOTED_PRICE, 
     PDFUtil.getBoldFont()); 
PdfPCell disc = PDFUtil.getTableHeaderCell(
     PDFUtil.ITM_DISCOUNT_PERCENT, PDFUtil.getBoldFont()); 
PdfPCell netAmt = PDFUtil.getTableHeaderCell(PDFUtil.NET_PRICE, 
     PDFUtil.getBoldFont()); 
PdfPCell amt = PDFUtil.getTableHeaderCell(PDFUtil.AMOUNT_LABEL, PDFUtil 
     .getBoldFont()); 
amt.setHorizontalAlignment(Element.ALIGN_RIGHT); 
itemListTab.addCell(slNo); 
itemListTab.addCell(itmDesc); 
itemListTab.addCell(full); 
itemListTab.addCell(loose); 
itemListTab.addCell(unitPrc); 
itemListTab.addCell(disc); 
itemListTab.addCell(netAmt); 
itemListTab.addCell(amt); 
ArrayList aList = vendPOVO.getItemList(); 
if (aList != null) 
{ 
    Object[] iList = aList.toArray(); 
    Arrays.sort(iList, new ItemSNoComparator(aList)); 
    int len = iList.length; 
    InventoryLogger.logDebug("After sorting the item list by SNo"); 
    InventoryLogger.logDebug("length"+len); 
    for (int i = 0; i < len; i++) 
    { 
     InventoryLogger.logDebug("inside for"); 
     ItemMasterVO itmMstrVO = (ItemMasterVO) iList[i]; 
     if (InventoryConstants.TRUE.equals(itmMstrVO 
      .getVendPurOrdInd())) 
     { 
      String ctry = " "; 
      InventoryLogger.logDebug ("Country of origin"+itmMstrVO.getCtryOfOrigin()); 
      if(itmMstrVO.getCtryOfOrigin() != null) 
      { 
       ctry = InventoryUtil.getStaticElementDescription(
         itmMstrVO.getCtryOfOrigin(),InventoryConstants.STATIC_ELE_CTRY); 
      } 
      String uomDesc = ""; 
      String looseUomTemp = ""; 
      if(itmMstrVO.getUomDesc().matches(InventoryConstants.UOM_KGGM)) 
      { 
       uomDesc = "1 KG "; 
       looseUomTemp = "KG"; 
      } 
      else 
      { 
       uomDesc = itmMstrVO.getUomDesc(); 
       looseUomTemp = itmMstrVO.getLooseUOM(); 
      } 
      String flFlagCheck = ""; 
      InventoryLogger.logDebug("fl"+itmMstrVO.getFullLooseInd()); 
      if(itmMstrVO.getFullLooseInd().matches(InventoryConstants.FULL_LOOSE_IND_F)) 
      { 
       flFlagCheck = itmMstrVO.getFullUOM(); 
      } 
      else 
      { 
       flFlagCheck = itmMstrVO.getLooseUOM(); 
      } 

      itemListTab.addCell(new PdfPCell(new Phrase(itmMstrVO 
       .getCusQuoSerialNo(), PDFUtil 
       .getNormalFont()))); 

      itemListTab.addCell(new PdfPCell(new Phrase(itmMstrVO 
       .getItemDisplayName()+ "/" + uomDesc + "/" + ctry , PDFUtil 
       .getNormalFont()))); 

      itemListTab.addCell(new PdfPCell(new Phrase(Long 
       .toString(itmMstrVO.getQuoFull())+" "+itmMstrVO.getFullUOM(), PDFUtil 
       .getNormalFont()))); 
      PdfPCell cellone = new PdfPCell(new Phrase(Long.toString(itmMstrVO.getQuoLoose())+" "+itmMstrVO.getLooseUOM(), PDFUtil.getNormalFont())); 
      cellone.setFixedHeight(25f); 
      itemListTab.addCell(cellone);itemListTab.addCell(new PdfPCell(new Phrase(InventoryUtil.getTwoDecDigPrecisionMin(itmMstrVO.getDiscUnitPrice())+"/"+flFlagCheck, PDFUtil 
       .getNormalFont()))); 

      itemListTab.addCell(new PdfPCell(new Phrase(InventoryUtil.getTwoDecDigPrecisionMin(itmMstrVO.getDiscPercent()), PDFUtil 
       .getNormalFont()))); 
      itemListTab.addCell(new PdfPCell(new Phrase((InventoryUtil.getTwoDecDigPrecisionMin(itmMstrVO.getDiscUnitPrice()))+"/" +flFlagCheck, PDFUtil.getNormalFont()))); 
      itemListTab.addCell(new PdfPCell(new Phrase(InventoryUtil.getTwoDecDigPrecisionMin(itmMstrVO.getAmount()), PDFUtil 
       .getNormalFont()))); 
     } 
    } 
} 
PdfPCell addCell = new PdfPCell(itemListTab); 
addCell.setBorder(0); 
mainTable.addCell(addCell); 

回答

0

嘿家伙终于让我找到了解决这个:

mainTable.addCell(PDFUtil.getBlankLine(20f)); 
    float[] colsWidth = {0.5f,3.8f,0.9f,0.9f,1.3f,0.9f,1.3f,1.4f}; 
    PdfPTable itemListTab = new PdfPTable(colsWidth); 

    PdfPCell slNo = PDFUtil.getTableHeaderCell(PDFUtil.S_NO, 
     PDFUtil.getBoldFont()); 

    PdfPCell itmDesc = PDFUtil.getTableHeaderCell(PDFUtil.ITEM_DESC, 
     PDFUtil.getBoldFont()); 

    PdfPCell loose = PDFUtil.getTableHeaderCell(PDFUtil.LOOSE_QTY, 
     PDFUtil.getBoldFont()); 
    PdfPCell full = PDFUtil.getTableHeaderCell(PDFUtil.FULL_QTY, 
     PDFUtil.getBoldFont()); 
    PdfPCell unitPrc = PDFUtil.getTableHeaderCell(PDFUtil.QUOTED_PRICE, 
     PDFUtil.getBoldFont()); 

    PdfPCell disc = PDFUtil.getTableHeaderCell(
     PDFUtil.ITM_DISCOUNT_PERCENT, PDFUtil.getBoldFont()); 
    PdfPCell netAmt = PDFUtil.getTableHeaderCell(PDFUtil.NET_PRICE, 
     PDFUtil.getBoldFont()); 
    PdfPCell amt = PDFUtil.getTableHeaderCell(PDFUtil.AMOUNT_LABEL, PDFUtil 
     .getBoldFont()); 
    amt.setHorizontalAlignment(Element.ALIGN_RIGHT); 
    itemListTab.addCell(slNo); 

    itemListTab.addCell(itmDesc); 

    itemListTab.addCell(full); 
    itemListTab.addCell(loose); 
    itemListTab.addCell(unitPrc); 

    itemListTab.addCell(disc); 
    itemListTab.addCell(netAmt); 
    itemListTab.addCell(amt);ArrayList aList = vendPOVO.getItemList(); 
    if (aList != null) 
    { 
    Object[] iList = aList.toArray(); 
    Arrays.sort(iList, new ItemSNoComparator(aList)); 
    int len = iList.length; 
    InventoryLogger.logDebug("After sorting the item list by SNo"); 
    InventoryLogger.logDebug("length"+len); 



    int lenthChr = 0; 
    int lineLength = 34; 
    float maxLineLength = 34; 
    for (int j = 0; j < len; j++) 
    { 
     ItemMasterVO itmMstrVO = (ItemMasterVO) iList[j]; 
     if (InventoryConstants.TRUE.equals(itmMstrVO.getVendPurOrdInd())) 
     { 

    String ctry = " "; 
    if(itmMstrVO.getCtryOfOrigin() != null) 
    { 
     ctry = InventoryUtil.getStaticElementDescription(itmMstrVO.getCtryOfOrigin(),InventoryConstants.STATIC_ELE_CTRY); 
    } 
    String uomDesc = ""; 
    String looseUomTemp = ""; 
    String Space = ""; 
    if(itmMstrVO.getUomDesc().matches(InventoryConstants.UOM_KGGM)) 
    { 
     uomDesc = "1 KG "; 
     looseUomTemp = "KG"; 
    } 
    else 
    { 
     uomDesc = itmMstrVO.getUomDesc(); 
     looseUomTemp = itmMstrVO.getLooseUOM(); 
    } 

    int lenthChrTmp = (itmMstrVO.getItemDesc1() + "/" + itmMstrVO.getItemDesc2() + "/" + uomDesc+ "/" + ctry).length() ; 

    lenthChr = (lenthChr > lenthChrTmp)?lenthChr:lenthChrTmp; 


     } 
    } 



    int mod = ((lenthChr % lineLength)> 0)?1:0; 
    maxLineLength = ((lenthChr/lineLength) + mod) * 13; 

    for (int i = 0; i < len; i++) 
    { 
     InventoryLogger.logDebug("inside for"); 
     ItemMasterVO itmMstrVO = (ItemMasterVO) iList[i]; 
     if (InventoryConstants.TRUE.equals(itmMstrVO 
     .getVendPurOrdInd())) 
     { 
    String ctry = " "; 
    InventoryLogger.logDebug("Country of origin"+itmMstrVO.getCtryOfOrigin()); 
    if(itmMstrVO.getCtryOfOrigin() != null) 
    { 
     ctry = InventoryUtil.getStaticElementDescription(
     itmMstrVO.getCtryOfOrigin(),InventoryConstants.STATIC_ELE_CTRY); 
    } 
    String uomDesc = ""; 
    String looseUomTemp = ""; 
    if(itmMstrVO.getUomDesc().matches(InventoryConstants.UOM_KGGM)) 
    { 
     uomDesc = "1 KG "; 
     looseUomTemp = "KG"; 
    } 
    else 
    { 
     uomDesc = itmMstrVO.getUomDesc(); 
     looseUomTemp = itmMstrVO.getLooseUOM(); 
    } 
    String flFlagCheck = ""; 
    InventoryLogger.logDebug("fl"+itmMstrVO.getFullLooseInd()); 
    if(itmMstrVO.getFullLooseInd().matches(InventoryConstants.FULL_LOOSE_IND_F)) 
    { 
     flFlagCheck = itmMstrVO.getFullUOM(); 
    } 
    else 
    { 
     flFlagCheck = itmMstrVO.getLooseUOM(); 
    } 

    itemListTab 
      .addCell(new PdfPCell(new Phrase(itmMstrVO 
     .getCusQuoSerialNo(), PDFUtil 
     .getNormalFont()))); 

    PdfPCell descCell = new PdfPCell(new Phrase(itmMstrVO 
      .getItemDisplayName()+ "/" + uomDesc + "/" + ctry , PDFUtil 
      .getNormalFont())); 
    descCell.setFixedHeight(maxLineLength); 
    itemListTab.addCell(descCell); 

    itemListTab.addCell(new PdfPCell(new Phrase(Long 
      .toString(itmMstrVO.getQuoFull())+" "+itmMstrVO.getFullUOM(), PDFUtil 
      .getNormalFont()))); 
    PdfPCell cellone = new PdfPCell(new Phrase(Long.toString(itmMstrVO.getQuoLoose())+" "+itmMstrVO.getLooseUOM(), PDFUtil.getNormalFont()));itemListTab.addCell(cellone);itemListTab.addCell(new PdfPCell(new Phrase(InventoryUtil.getTwoDecDigPrecisionMin(itmMstrVO.getDiscUnitPrice())+"/"+flFlagCheck, PDFUtil 
      .getNormalFont()))); 

    itemListTab.addCell(new PdfPCell(new Phrase(InventoryUtil.getTwoDecDigPrecisionMin(itmMstrVO.getDiscPercent()), PDFUtil 
      .getNormalFont()))); 
    itemListTab.addCell(new PdfPCell(new Phrase((InventoryUtil.getTwoDecDigPrecisionMin(itmMstrVO.getDiscUnitPrice()))+"/" +flFlagCheck, PDFUtil.getNormalFont()))); 
    itemListTab.addCell(new PdfPCell(new Phrase(InventoryUtil.getTwoDecDigPrecisionMin(itmMstrVO.getAmount()), PDFUtil 
      .getNormalFont()))); 
     } 
    } 
    } 
    PdfPCell addCell = new PdfPCell(itemListTab); 
    addCell.setBorder(0); 
    mainTable.addCell(addCell); 

我已经介绍了线路长度检查和一些计算用于固定的高度。在计算高度后,我为下面的pdfpcell设置fixedheight属性。