Bottomborder一个子表细胞和父表的一般pdfPcell的并非是iTextPDF一条直线(B

2019-11-03 11:30发布

我用这是一个table_body父表。 一个子表是子表中(因为我想向这个子表中一个PdfPCell内部父表)。 我想画一条线当行完成父表按我的要求。 但是,这个问题是针对子表bottomborder和一般pdfPcell“body_cell_bottomBorder”是没有得到在一个直线上。

PdfPTable table_body = new PdfPTable(2); //  main table
table_body.getDefaultCell().setBorder(Rectangle.NO_BORDER); // set border to none
table_body.setWidthPercentage(100.0f);
table_body.setWidths(new float[] {3.0f,1.0f,});
table_body.setSpacingBefore(6);

PdfPTable sub_table = new PdfPTable(1); // sub table
sub_table.getDefaultCell().setBorder(Rectangle.NO_BORDER); // set border to none
body_cell_bottomBorder.setPhrase(new Phrase("Example",font_body)); // this cell has the bottom border only
Image image = Image.getInstance(BarCode.createBarcode("example"));
body_cell = new PdfPCell(image, true);  // this cell has no border at all
body_cell.setBorder(Rectangle.NO_BORDER); 
sub_table.addCell(body_cell); // added one row in the sub table
sub_table.addCell(body_cell_bottomBorder); // added second row in the sub table and also want a bottom border
table_body.addCell(sub_table);   // added subtable into the parent table pdfpcell

body_cell_bottomBorder.setPhrase(new Phrase(RPL,font_body)); // now adding second column value in parent table pdfPcell and want a bottom border only
table_body.addCell(body_cell_bottomBorder); // added to the parent table

问题是父表的这两个单元都不要我希望有一个完整的一条直线。

Answer 1:

单程:

  • 在“孩子” PdfPTable每个PdfPCell添加,明确设置Rectangle.NO_BORDER
  • 当你与“子”表完成的,包裹在一个PdfPCell并设置边界(一个或多个),然后添加到“父” PdfPTable

例如,在C#,因为这个问题是标记瓦特/ itextsharp

string text = "0000";
int topBottomBorder = Rectangle.BOTTOM_BORDER | Rectangle.TOP_BORDER;    
using (Document document = new Document()) {
  PdfWriter writer = PdfWriter.GetInstance(document, STREAM);
  document.Open(); 
  PdfPTable parentTable = new PdfPTable(2);
  PdfPCell cell = new PdfPCell() {
    Phrase = new Phrase(text), Border = topBottomBorder
  };
  parentTable.AddCell(cell);

// in 'child' PdfPTable *ALL* PdfPCells set *WITH NO* border
  PdfPTable childTable = new PdfPTable(1);
  childTable.AddCell(new PdfPCell
    (
      (new BarcodeQRCode(text, 1, 1, null)).GetImage()
    ) 
    { Border = Rectangle.NO_BORDER, PaddingTop = 1 }
  );
  childTable.AddCell(new PdfPCell() { // row 2
    Border = Rectangle.NO_BORDER, Phrase = new Phrase(text)
  });

// 1. wrap childTable in PdfPCell and set top & bottom borders
  PdfPCell childTableCell = new PdfPCell(childTable) {
    Border = topBottomBorder
  };
// 2. add to main PdfPTable           
  parentTable.AddCell(childTableCell);
  document.Add(parentTable);
}

结果:



文章来源: Bottomborder for a subtable cell and for the general pdfPcell of parent table are not making a single straight line in iTextPDF