首页 > 技术文章 > itext合并单元格(转)

jiangyaqiong 2013-11-13 11:00 原文

iText中的PdfPTable和PdfPCell仅提供了合并列的功能(通过cell.setColspan(cellCount)实现),并未提供合并行的方法。如果需要生成下列表格,怎么实现呢?

A
D
B
C

 

可考虑在cell中添加一个表格来实现。对于上列表格,需先建立一个2列的表格。在表格的第一列中填充一个2行的表格即可。具体代码如下:

1 package itext;
2
3 import java.io.FileOutputStream;
4
5 import com.lowagie.text.Element;
6 import com.lowagie.text.PageSize;
7 import com.lowagie.text.Paragraph;
8 import com.lowagie.text.pdf.PdfPCell;
9 import com.lowagie.text.pdf.PdfPTable;
10 import com.lowagie.text.pdf.PdfWriter;
11
12 publicclass MergeCell {
13
14 publicstaticvoid main(String[] args) {
15 String tmpPath ="c:\\test.pdf";
16 PdfPCell cell;
17 PdfPCell iCell;
18 PdfPTable iTable;
19 float lineHeight1 = (float)25.0;
20 float lineHeight2 = (float)25.0;
21 try{
22 Document pdfDoc =new Document(PageSize.A4.rotate(), 36, 36, 24, 36);
23
24 PdfWriter.getInstance(pdfDoc, new FileOutputStream(tmpPath));
25
26 pdfDoc.open();
27
28 PdfPTable headerTable =new PdfPTable(2);
29 headerTable.setWidthPercentage(40);
30
31 //create a table to fill cell 1
32 iTable =new PdfPTable(2);
33 iCell =new PdfPCell(new Paragraph("A"));
34 iCell.setHorizontalAlignment(Element.ALIGN_CENTER);
35 iCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
36 iCell.setFixedHeight(lineHeight1);
37 //merge column
38 iCell.setColspan(2);
39 iTable.addCell(iCell);
40 iCell =new PdfPCell(new Paragraph("B"));
41 iCell.setHorizontalAlignment(Element.ALIGN_CENTER);
42 iCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
43 iCell.setFixedHeight(lineHeight2);
44 iTable.addCell(iCell);
45 iCell =new PdfPCell(new Paragraph("C"));
46 iCell.setHorizontalAlignment(Element.ALIGN_CENTER);
47 iCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
48 iCell.setFixedHeight(lineHeight2);
49 iTable.addCell(iCell);
50 cell =new PdfPCell(iTable);
51 cell.setPadding(0);
52 headerTable.addCell(cell);
53
54 //fill cell 2
55 cell =new PdfPCell(new Paragraph("D"));
56 cell.setHorizontalAlignment(Element.ALIGN_CENTER);
57 cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
58 cell.setPadding(0);
59 cell.setFixedHeight(lineHeight1+lineHeight2);
60 headerTable.addCell(cell);
61
62 pdfDoc.add(headerTable);
63
64 pdfDoc.close();
65
66 } catch(Exception e) {
67 e.printStackTrace();
68 }
69 }
70 }

推荐阅读