2014-09-29 250 views
0

我需要制作一个小标签(1.75长和0.75高),只包含三行使用iText。问题是每当我将Chunk.NEWLINE添加到文档中时,它就不会将我移动到下一行,而是将我移到下一页。这是因为页面尺寸较小。创建一个小尺寸的标签

我该如何限制我的所有文本在同一页面上,但只在下一行?

Float width = 126.4725f; // 1.75 in 
Float height = 54.2025f; // 0.75 in 

Rectangle pageSize = new Rectangle(width, height); 
document = new Document(pageSize, 5f, 55f, 2f, 180f); 
specimenPDF = new File("specimenLabel_"+reqID); 
PdfWriter.getInstance(document, new FileOutputStream(specimenPDF)); 
document.open(); 
Paragraph specimenInformation = new Paragraph(); 
document.add(new Chunk(string1, FontFactory.getFont(FontFactory.HELVETICA, 2, Font.NORMAL, new BaseColor(new Color(0, 0, 0))))); 
document.add(Chunk.NEWLINE); 
document.add(new Chunk(string2, FontFactory.getFont(FontFactory.HELVETICA, 2, Font.NORMAL, new BaseColor(new Color(0, 0, 0))))); 
document.add(Chunk.NEWLINE); 
document.add(new Chunk(string3, FontFactory.getFont(FontFactory.HELVETICA, 2, Font.NORMAL, new BaseColor(new Color(0, 0, 0))))); 

specimenInformation.setAlignment(Element.ALIGN_TOP); 
document.add(specimenInformation); 
document.close(); 

回答

0

我看到几个问题。

首先,你有一个单位高度为54的单据,你希望iText使用其中的2个单位作为顶部边距,其中180个单位用于底部边距,给出-128个水平单位单位。看起来你正在给坐标而不是宽度,这正是iText所期待的。你会比我更清楚,但我想改变它的东西,如:

document = new Document(pageSize, 5f, 5f, 5f, 5f); 

其次,你已经有了一个Paragraph,但你不使用它,而不是被直接写入到文档中。其实我使用Paragraph建议:

Paragraph specimenInformation = new Paragraph(); 
specimenInformation.add(new Chunk(string1, FontFactory.getFont(FontFactory.HELVETICA, 2, Font.NORMAL, new BaseColor(new Color(0, 0, 0))))); 
specimenInformation.add(Chunk.NEWLINE); 
specimenInformation.add(new Chunk(string2, FontFactory.getFont(FontFactory.HELVETICA, 2, Font.NORMAL, new BaseColor(new Color(0, 0, 0))))); 
specimenInformation.add(Chunk.NEWLINE); 
specimenInformation.add(new Chunk(string3, FontFactory.getFont(FontFactory.HELVETICA, 2, Font.NORMAL, new BaseColor(new Color(0, 0, 0))))); 

最后,你需要告诉iText的高大的“线”是如何这是由Leading属性来完成。你可以直接在Paragraph的构造函数中设置它。下面我将它设置为与您的字体相同的大小。

Paragraph specimenInformation = new Paragraph(2);