iText 学习(二)

本文详细介绍了iText中Chunk对象的基本概念、属性设置及使用技巧。Chunk作为文档中最基本的文本片段,能够添加特定样式的文本内容。文章通过实例演示了如何创建带有不同样式效果的Chunk对象,并探讨了它们在实际应用中的局限性和解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、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();
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值