ITEXT 内容编辑
image.png
中文内容的问题
IText 默认情况下写不支持写中文,写出来的内容无法展示;这个时候就需要使用到中文字体了
无特殊要求的情况下 可以使用下文中的宋体字
BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font font = new Font(baseFont, 5.5f, Font.NORMAL, BaseColor.BLACK);
这时候写出的中文内容就可以显示出来了。
另外,如果还有别的字体需求的时候,可以用从字体文件创建字体的方式来写中文内容,下文以微软雅黑为例:
String resourcesPath = "D:"+Font.seprator +"fonts" + File.separator + "msyh.ttc,0";
BaseFont baseFont = BaseFont.createFont(resourcesPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font font = new Font(baseFont, 5.5f, Font.NORMAL, BaseColor.BLACK);
Chunk(文本块)
文本块,ITEXT中写文本的最小单位,可以指定文本块的字体,背景颜色,字体颜色等操作
Chunk chunk= new Chunk("china");
// 设置背景色
chunk.setBackground(BaseColor.WHITE,font);
// 追加内容
chunk.append("china");
// 设置字体颜色
font.setColor(BaseColor.YELLOW);
// 设置文本基于基础线上下偏移,正数为向上偏移,复数为向下偏移
chunk.setTextRise(-80);
// 设置字符间距
chunk.setCharacterSpacing(20f);
// 设置字符的水平宽度
chunk.setHorizontalScaling(30f);
//设置换行
document.add(Chunk.NEWLINE);
// 设置下划线
chunk.setUnderline(10f,8f);
// 设置倾斜文本
chunk.setSkew(18f,30f);
// 文本渲染模式
// TEXT_RENDER_MODE_FILL 填充
// TEXT_RENDER_MODE_STROKE 笔画 可以设置宽度
// TEXT_RENDER_MODE_FILL_STROKE 填充_笔画 可以设置宽度
// TEXT_RENDER_MODE_INVISIBLE 无形
// TEXT_RENDER_MODE_FILL_CLIP 填充_剪辑
// TEXT_RENDER_MODE_STROKE_CLIP 笔画_剪辑
// TEXT_RENDER_MODE_FILL_STROKE_CLIP 填充_笔画_剪辑
// TEXT_RENDER_MODE_CLIP 剪辑
chunk.setTextRenderMode(PdfContentByte.TEXT_RENDER_MODE_INVISIBLE,null,BaseColor.CYAN);
几个特殊的使用
Chunk.SPACETABBING 字符间插入一个tab间隔
Chunk.NEWLINE 文本换行
Chunk.NEXTPAGE 换页
Chunk.TABBING 字符间插入一个tab间隔
Phrase(短句)
一个短句有一个主字体,但短句中添加的Element可以具有不同于主字体的字体,短句在写满一行之后会自动换行,默认行间距是字体大小的1.5倍;
查看源码,不难发现,Chunk是实现的Element和IAccessibleElement接口的,而Phrase是继承了ArrayList<Element> 实现了TextElementArray接口的,
所以实际上Phrase是以数组的形式存在的,这点我们可以从Phrase源码的add方法来具体看下,第一点,可以通过索引插入内容到指定索引位置,第二点:可以直接插入一个Collection集合到Phrase
/**
* Adds a <CODE>Chunk</CODE>, an <CODE>Anchor</CODE> or another <CODE>Phrase</CODE>
* to this <CODE>Phrase</CODE>.
*
* @param index index at which the specified element is to be inserted
* @param element an object of type <CODE>Chunk</CODE>, <CODE>Anchor</CODE> or <CODE>Phrase</CODE>
* @throws ClassCastException when you try to add something that isn't a <CODE>Chunk</CODE>, <CODE>Anchor</CODE> or <CODE>Phrase</CODE>
* @since 5.0.1 (signature changed to use Element)
*/
@Override
public void add(final int index, final Element element) {
...
}
/**
* Adds a <CODE>String</CODE> to this <CODE>Phrase</CODE>.
*
* @param s a string
* @return a boolean
* @since 5.0.1
*/
public boolean add(final String s) {
...
}
/**
* Adds a <CODE>Chunk</CODE>, <CODE>Anchor</CODE> or another <CODE>Phrase</CODE>
* to this <CODE>Phrase</CODE>.
*
* @param element an object of type <CODE>Chunk</CODE>, <CODE>Anchor</CODE> or <CODE>Phrase</CODE>
* @return a boolean
* @throws ClassCastException when you try to add something that isn't a <CODE>Chunk</CODE>, <CODE>Anchor</CODE> or <CODE>Phrase</CODE>
* @since 5.0.1 (signature changed to use Element)
*/
@Override
public boolean add(final Element element) {
...
}
/**
* Adds a collection of <CODE>Chunk</CODE>s
* to this <CODE>Phrase</CODE>.
*
* @param collection a collection of <CODE>Chunk</CODE>s, <CODE>Anchor</CODE>s and <CODE>Phrase</CODE>s.
* @return <CODE>true</CODE> if the action succeeded, <CODE>false</CODE> if not.
* @throws ClassCastException when you try to add something that isn't a <CODE>Chunk</CODE>, <CODE>Anchor</CODE> or <CODE>Phrase</CODE>
*/
@Override
public boolean addAll(final Collection<? extends Element> collection) {
...
}
Paragraph(段落)
Paragraph其实是继承自Phrase的,但是却别在于段落默认每个段落都会另起一行去写内容,下面列一些段落特有的一些常用方法
// 设置行间距
paragraph.setLeading();
// 设置水平对齐方式(对其方式的设置选项,下文中会做详细说明)
paragraph.setAlignment();
// 设置左缩进
paragraph.setIndentationLeft(10f);
// 设置右缩进
paragraph.setIndentationRight(10f);
// 设置首行缩进
paragraph.setFirstLineIndent(40f);
// 设置与段落上面内容的间距
paragraph.setSpacingBefore();
// 设置与段落下面内容的间距
paragraph.setSpacingAfter();
// 设置段落内容是否在一起,设置为true的话,不会把段落写到下一页
paragraph.setKeepTogether();
对齐方式
Element.ALIGN_UNDEFINED
// 水平左对齐
Element.ALIGN_LEFT
// 水平居中对齐
Element.ALIGN_CENTER
// 水平右对齐
Element.ALIGN_RIGHT
Element.ALIGN_JUSTIFIED
Element.ALIGN_JUSTIFIED_ALL
Element.ALIGN_BASELINE
// 垂直底部对齐
Element.ALIGN_BOTTOM
// 垂直居中对齐
Element.ALIGN_MIDDLE
// 垂直顶部对齐
Element.ALIGN_TOP