使用java创建Pdf

时间:2012-01-03 09:56:43

标签: java pdf itext

您好我正在使用java创建一个pdf文件。我需要有这样的输出:

t
h this is text 1
i this is text 2
s                                                                     
i
s
h
t
t

这意味着桌子上有一个文本,以垂直形式显示。我写了这样的代码:

PdfWriter.getInstance(document, new FileOutputStream("check.pdf"));
document.open();
Font cellFont = FontFactory.getFont(FontFactory.TIMES_BOLD, 6, Font.BOLD);
PdfPTable table = new PdfPTable(8);
table.getDefaultCell().setBorder(1);
table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
PdfPCell cell = new PdfPCell(new Phrase("This is the text 1", cellFont));
cell.setColspan(8);
cell.setBorder(0);
cell.setHorizontalAlignment(3);
table.addCell(cell);
cell = new PdfPCell(new Phrase("This is the text 2", cellFont));
cell.setColspan(8);
cell.setBorder(0);
cell.setHorizontalAlignment(3);
table.addCell(cell);

document.add(table);
document.close ();

此输出如下:

this is text 1
this is text 2

任何人都可以告诉我如何修改此代码以获得我想要的输出

1 个答案:

答案 0 :(得分:2)

从有限的信息来看,我并不完全了解您的要求。无论如何,你几乎总能找到解决方法并实现你想要的。你需要的是Rowspan,这不是一个有效的方法(出于正当理由)。可以通过在表格单元格内“嵌套”表来实现此Rowspan。我编写了一个快速示例,如下所示:

String text1 = "This is the text 1";
String text2 = "This is the text 2";

Document document = new Document();

PdfWriter.getInstance(document, new FileOutputStream(fileName));
document.open();
Font cellFont = FontFactory.getFont(FontFactory.TIMES_BOLD, 14, Font.BOLD);

PdfPTable table = new PdfPTable(8);
table.getDefaultCell().setBorder(0);


PdfPTable nestedTable1 = new PdfPTable(1);
nestedTable1.getDefaultCell().setBorder(0);
nestedTable1.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
nestedTable1.getDefaultCell().setVerticalAlignment(Element.ALIGN_CENTER);

for(int i=0;i<text1.length();i++) {
   PdfPCell nestedCell = new PdfPCell(new Phrase("" + text1.charAt(i), cellFont));
   nestedCell.setBorder(0);
   nestedTable1.addCell(nestedCell);
}

PdfPTable nestedTable2 = new PdfPTable(1);
nestedTable2.getDefaultCell().setBorder(0);
nestedTable2.getDefaultCell().setHorizontalAlignment(Element.ALIGN_LEFT);
nestedTable2.getDefaultCell().setVerticalAlignment(Element.ALIGN_CENTER);

PdfPCell nestedCell1 = new PdfPCell(new Phrase(text1, cellFont));
nestedCell1.setBorder(0);
PdfPCell nestedCell2 = new PdfPCell(new Phrase(text2, cellFont));
nestedCell2.setBorder(0);

nestedTable2.addCell(nestedCell1);
nestedTable2.addCell(nestedCell2);

PdfPCell cell1 = new PdfPCell(nestedTable1);
cell1.setBorder(0);
cell1.setColspan(1);

PdfPCell cell2 = new PdfPCell(nestedTable2);
cell2.setBorder(0);
cell2.setColspan(7);

table.addCell(cell1);
table.addCell(cell2);

document.add(table);
document.close ();

pdf输出如下所示: enter image description here