2012-01-03 67 views
0

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

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

这意味着有一个文本outsite表中显示垂直形式。我写了这样的代码:

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 

任何一个可以告诉我如何修改这个代码让我的期望输出

+3

什么样的信息是基于左侧竖排文字?我没有看到它在您的代码 – AlanFoster 2012-01-03 10:03:21

+0

在表左侧会有一个文本ex:在这里“这是htt”我不知道如何在我的表外以这种方式添加此文本 – tanvir 2012-01-03 11:28:55

回答

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

+0

感谢您的回复。我其实需要的输出不是这样的。这是我的要求的一个例子。我需要这种输出。因此,在我的主表中,我需要在pdf文件的中间添加这些信息。我已经完成了文件,但无法做到这一点。这是样本输出[link] http://imageshack.us/photo/my-images/339/screenshoot.png/ – tanvir 2012-01-03 12:11:41

+0

tanvir,如果您使用上述代码中的逻辑,您可以创建该报告,如图所示你的上面的链接。如果您需要生成大量报告,则可以考虑报告框架,如Jasper Reports,您可以在iReport报告设计器中设计报告,并调用Jasper报告引擎生成报告。 – bchetty 2012-01-03 20:10:16

+0

@tanvir这是一个非常小的图像。你可以发布一个更大的例子。 – AlanFoster 2012-01-03 20:26:25