一、iText中高级对象的类结构图
这里讲述为Document添加内容的第一种方法(添加高级对象)
二、Chunk
Chunk类是可以添加到Document中最小的文本片段。Chunk类中包含一个StringBuilder对象,其代表了有相同的字体,字体大小,字体颜色和字体格式的文本,
块是一个有确定字体的字符串,这些属性定义在Chunk类中Font对象中。其它的属性如背景色(background),
textRise(用来模拟下标和上标)还有underline(用来模拟文本的下划线或者删除线),都定义在其它一系列的属性中,这些属性都可以通过settter 方法进行设置。
在大部分情况下我们都使用其它的文本对象如Pharse和Paragraphs。总而言之除了一些比较特殊的Chunk对象(比如Chunk.NewLine),
我们很少直接将Chunk加入到Document中。
在使用过程中发现,Chunk会在同一行进行排列,如果内容超出一行时,Chunk中的内容会将多余的内容又从行开头进行显示,造成文字重叠显示。
如果我们通过以下代码进行设置,你会发现当前的chunk是移动了,但是其位置仍然保留在那里。
/*
* 设置块往上移动的距离(上标),如果是负数就表示是往下移动(下标)<br>
* 注意,块所在文档中的位置还存在
*/
chunk.setTextRise(-23L);
如果我们通过以下代码进行设置,你会发现当前的chunk整体从行开头进行写入,并没有想象中的换行写入(或者:document.add(new Chunk("\n", NORMAL));)
doc.add(chunk);
/**
* 整chunk换行但是该chunk写入的y轴位置不会变,变的是x轴的位置(并不是我们想象中的换行)
*/
doc.add(Chunk.NEWLINE);
那么如何将一个Chunk作为一个整体来进行显示呢?我们可以结合以上的两种方式进行处理,虽然能达到这个效果,但是你会发现其中的问题还是很多,
如:存在下划线的chunk,文字下移了,但是其下划线没有移动。
下面提供的案例,可以慢慢的去试,或者使用Chunk中的其他方法去进行调试:
public class Second {
public static void main(String[] args)throws Exception {
Document doc = new Document();
PdfWriter.getInstance(doc, new FileOutputStream("d:\\second.pdf"));
doc.open();
//定义块
Chunk chunk = new Chunk("Hello world", FontFactory.getFont(FontFactory.COURIER, 20L, Font.ITALIC,BaseColor.BLUE));
//设置块的背景色
chunk.setBackground(BaseColor.RED);
//设置块的下划线
Chunk chunk1 = new Chunk("This text is underlined", FontFactory.getFont(FontFactory.HELVETICA, 12, Font.UNDERLINE));
//设置块的删除线
Chunk chunk2 = new Chunk("This font is of type ITALIC | STRIKETHRU", FontFactory.getFont(FontFactory.HELVETICA, 12, Font.ITALIC | Font.STRIKETHRU));
doc.add(chunk);
/**
* 整chunk换行但是该chunk写入的y轴位置不会变,变的是x轴的位置(并不是我们想象中的换行)
*/
doc.add(Chunk.NEWLINE);
/*
* 设置块往上移动的距离(上标),如果是负数就表示是往下移动(下标)<br>
* 注意,块所在文档中的位置还存在
*/
chunk1.setTextRise(-23L);
doc.add(chunk1);
doc.add(chunk2);
doc.close();
}
}