IText中有三个处理text的类com.lowagie.text.Chunk,com.lowagie.text.Phrase,com.lowagie.text.Paragraph。
它们之间有什么区别呢?
Chunk
Chunk是IText最小的文本编辑单位。不能再拆分更小的单元。其他高级的文本对象都是基于Chunk的。请看下图
(注此图,来源自http://www.cnblogs.com/LifelongLearning/archive/2011/03/30/2000072.html)
package org.study.itext.text;
import java.awt.Color;
import java.io.FileOutputStream;
import java.io.IOException;
import com.lowagie.text.Chunk;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Font;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfWriter;
/**
* @blog http://reymont.iteye.com/
* @author reymont.li
* @version create time:2011-7-14 上午11:49:01
*/
public class ChunkTest {
public static void main(String[] args) {
Document document = new Document();
try {
PdfWriter.getInstance(document, new FileOutputStream(
"resource/ChunkTest.pdf"));
document.open();
BaseFont songbfChinese = BaseFont.createFont("resource/STSONG.TTF",
BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font songFont = new Font(songbfChinese, 18, Font.UNDERLINE);
Chunk love = new Chunk("我们的爱", songFont);
love.setTextRise(10);
love.setBackground(Color.CYAN);
BaseFont xingkabfChinese = BaseFont.createFont(
"resource/STXINGKA.TTF", BaseFont.IDENTITY_H,
BaseFont.EMBEDDED);
Font xingkaFont = new Font(xingkabfChinese, 18, Font.ITALIC);
Chunk simple = new Chunk("简单", xingkaFont);
simple.setBackground(Color.BLUE);
simple.setTextRise(-10);
BaseFont kaibfChinese = BaseFont.createFont("resource/STKAITI.TTF",
BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font kaiFont = new Font(kaibfChinese, 18, Font.BOLD);
Chunk song = new Chunk("如歌", kaiFont);
song.setBackground(Color.RED);
document.add(love);
document.add(simple);
document.add(song);
} catch (DocumentException de) {
System.err.println(de.getMessage());
} catch (IOException ioe) {
System.err.println(ioe.getMessage());
}
document.close();
}
}
生成的文本为
在水平方向,Chunk的字符满一行,就会从头开始。请注意,这是从头开始,而不是另起一行。对于Chunk来说,行间距默认为0,那么当文档中只有Chunk时,这些字符永远只会出现再第一行。
package org.study.itext.text;
import java.awt.Color;
import java.io.FileOutputStream;
import java.io.IOException;
import com.lowagie.text.Chunk;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Font;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfWriter;
/**
* @blog http://reymont.iteye.com/
* @author reymont.li
* @version create time:2011-7-14 上午11:49:14
*/
public class ChunkTest2 {
public static void main(String[] args) {
Document document = new Document();
try {
PdfWriter.getInstance(document, new FileOutputStream(
"resource/ChunkTest2.pdf"));
document.open();
BaseFont songbfChinese = BaseFont.createFont("resource/STSONG.TTF",
BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font songFont = new Font(songbfChinese, 18, Font.UNDERLINE);
Chunk love = new Chunk("我们的爱", songFont);
love.setTextRise(10);
love.setBackground(Color.CYAN);
BaseFont xingkabfChinese = BaseFont.createFont(
"resource/STXINGKA.TTF", BaseFont.IDENTITY_H,
BaseFont.EMBEDDED);
Font xingkaFont = new Font(xingkabfChinese, 18, Font.ITALIC);
Chunk simple = new Chunk("简单", xingkaFont);
simple.setBackground(Color.BLUE);
simple.setTextRise(-10);
BaseFont kaibfChinese = BaseFont.createFont("resource/STKAITI.TTF",
BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font kaiFont = new Font(kaibfChinese, 18, Font.BOLD);
Chunk song = new Chunk("如歌", kaiFont);
song.setBackground(Color.RED);
for (int i = 0; i < 10; i++) {
document.add(love);
document.add(simple);
document.add(song);
}
} catch (DocumentException de) {
System.err.println(de.getMessage());
} catch (IOException ioe) {
System.err.println(ioe.getMessage());
}
document.close();
}
}
生成的文档为:
可以看到后面的字符串覆盖了前面的字符串。怎么才能解决这个问题呢?
Phrase
我们可以将Chunk当成固定的块,Phrase当成由Chunk组成的字符串。让我们做一些小改动。
package org.study.itext.text;
import java.awt.Color;
import java.io.FileOutputStream;
import java.io.IOException;
import com.lowagie.text.Chunk;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Font;
import com.lowagie.text.Phrase;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfWriter;
/**
* @blog http://reymont.iteye.com/
* @author reymont.li
* @version create time:2011-7-14 上午11:49:24
*/
public class PhraseTest {
public static void main(String[] args) {
Document document = new Document();
try {
PdfWriter.getInstance(document, new FileOutputStream(
"resource/PhraseTest.pdf"));
document.open();
BaseFont songbfChinese = BaseFont.createFont("resource/STSONG.TTF",
BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font songFont = new Font(songbfChinese, 18, Font.UNDERLINE);
Chunk love = new Chunk("我们的爱", songFont);
love.setTextRise(10);
love.setBackground(Color.CYAN);
BaseFont xingkabfChinese = BaseFont.createFont(
"resource/STXINGKA.TTF", BaseFont.IDENTITY_H,
BaseFont.EMBEDDED);
Font xingkaFont = new Font(xingkabfChinese, 18, Font.ITALIC);
Chunk simple = new Chunk("简单", xingkaFont);
simple.setBackground(Color.BLUE);
simple.setTextRise(-10);
BaseFont kaibfChinese = BaseFont.createFont("resource/STKAITI.TTF",
BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font kaiFont = new Font(kaibfChinese, 18, Font.BOLD);
Chunk song = new Chunk("如歌", kaiFont);
song.setBackground(Color.RED);
Phrase phrase = new Phrase(30);
phrase.add(love);
phrase.add(simple);
phrase.add(song);
for (int i = 0; i < 10; i++)
document.add(phrase);
document.add(Chunk.NEWLINE);
document.add(phrase);
phrase.add("\n");
for (int i = 0; i < 3; i++) {
document.add(phrase);
}
} catch (DocumentException de) {
System.err.println(de.getMessage());
} catch (IOException ioe) {
System.err.println(ioe.getMessage());
}
document.close();
}
}
Document添加了phrase。这样,Phrase就会自动换行。
还有两种方式也可以换行
。
document.add(Chunk.NEWLINE);
和
phrase.add("\n");
貌似这样就解决了字符串换行的问题,但这些都要写一些额外的代码,有什么类封装这些动作呢?
Paragraph
Paragraph继承自Phase。
package org.study.itext.text;
import java.io.FileOutputStream;
import java.io.IOException;
import com.lowagie.text.Chunk;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Element;
import com.lowagie.text.Font;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Phrase;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfWriter;
/**
* @blog http://reymont.iteye.com/
* @author reymont.li
* @version create time:2011-7-14 上午11:49:18
*/
public class ParagraphTest {
public static void main(String[] args) {
Document document = new Document();
try {
PdfWriter.getInstance(
document,
new FileOutputStream("resource/ParagraphTest.pdf"));
document.open();
String text = "我们的爱简单如歌";
Phrase phrase1 = new Phrase(text);
Phrase phrase2 = new Phrase(new Chunk(text, new Font(
Font.TIMES_ROMAN)));
BaseFont songbfChinese = BaseFont.createFont("resource/STSONG.TTF",
BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font font = new Font(songbfChinese, 18, Font.NORMAL);
Phrase phrase3 = new Phrase(text, font);
Paragraph paragraph = new Paragraph();
paragraph.add(phrase1);
paragraph.add(phrase2);
paragraph.add(phrase3);
document.add(paragraph);
document.add(paragraph);
paragraph.setAlignment(Element.ALIGN_LEFT);
document.add(paragraph);
paragraph.setAlignment(Element.ALIGN_CENTER);
document.add(paragraph);
paragraph.setAlignment(Element.ALIGN_RIGHT);
document.add(paragraph);
paragraph.setAlignment(Element.ALIGN_JUSTIFIED);
document.add(paragraph);
paragraph.setSpacingBefore(10);
document.add(paragraph);
paragraph.setSpacingBefore(0);
paragraph.setSpacingAfter(10);
document.add(paragraph);
paragraph.setIndentationLeft(20);
document.add(paragraph);
paragraph.setIndentationRight(20);
document.add(paragraph);
} catch (DocumentException de) {
System.err.println(de.getMessage());
} catch (IOException ioe) {
System.err.println(ioe.getMessage());
}
document.close();
}
}
每段文字上面和下面的空间,可使用setSpacingBefore() 和setSpacingAfter() 来指定。
每段文字的缩进可使用setIndentationLeft()和setIndentationRight()。
参考内容:
- Itext In Action
- http://www.cnblogs.com/LifelongLearning/archive/2011/03/30/2000072.html
- 文中所需的字体,在C:\WINDOWS\Fonts
- 使用itext的版本为2.0.8
- 大小: 190.8 KB
- 大小: 4.6 KB
- 大小: 20.9 KB
- 大小: 1.6 KB
- 大小: 51.6 KB
- 大小: 50.5 KB
分享到:
相关推荐
`Paragraph` 和 `Chunk` 类用于创建文本段落和单个文本块。可以使用 `Chunk` 创建中文字符,然后将其添加到 `Paragraph` 中。 ```java Paragraph paragraph = new Paragraph(); paragraph.add(new Chunk("你好,...
对于文本,可以使用Paragraph或Chunk对象,设置字体、大小和颜色: ```java Font font = new Font(Font.FontFamily.HELVETICA, 12, Font.NORMAL); Paragraph paragraph = new Paragraph("Hello, World!", font); ...
- **`Paragraph`**:由多个 `Phrase` 或 `Chunk` 构成,用于创建更复杂的文本布局。 - **`TableWrapper` 和 `PdfPTable`**:用于创建表格,其中 `PdfPTable` 更加灵活且功能强大。 - **`Image`**:用于处理图像对象...
可以使用`Chunk`、`Paragraph`、`ColumnText`等类进行更复杂的版式布局,如多列文本、对齐方式等。 8. **事件和回调** iText允许注册事件监听器,如页眉页脚的添加,可以通过实现`PdfPageEvent`接口。 9. **安全...
iText提供Paragraph、Chunk、Image等类来添加文本和图像。例如,向文档添加一段文字: ```java Paragraph paragraph = new Paragraph("这是添加的文本"); document.add(paragraph); ``` 要插入图片,可以这样操作...
iText提供了`Paragraph`、`Chunk`和`Font`类来处理文本。你可以创建`Paragraph`对象,然后通过`add()`方法将`Chunk`对象(包含具体文本和格式)添加到段落中。`Font`类则用于设置文本的字体、大小、颜色等样式。 3...
5. **添加文本**:通过`Paragraph`、`Chunk`类添加文本到PDF。例如: ```java Paragraph paragraph = new Paragraph("Hello, World!"); document.add(paragraph); ``` ```csharp Paragraph paragraph = new ...
`Chunk`是基本的文本元素,`Paragraph`用于组织多个`Chunk`。例如: ```java Paragraph paragraph = new Paragraph(); paragraph.add(new Chunk("Hello, World!", FontFactory.getFont(FontFactory.HELVETICA)));...
比如,`Document`类用于表示整个文档,`PdfWriter`类用于写入PDF内容,而`Paragraph`、`Chunk`和`Phrase`等类用于表示文档中的文本内容。这些类的使用方法构成了创建PDF文件的基础。 在Java代码中,首先需要导入...
- **2.2: ADDING CHUNK, PHRASE, PARAGRAPH AND LIST OBJECTS** - **2.2.1: The Chunk object: a String, a Font and some attributes**:解释Chunk对象的作用,即定义文本片段及其样式属性。 - **2.2.2: The ...
使用 `Paragraph`、`Chunk`、`Font` 等类可以添加文本。例如,添加一段标题: ```java Font titleFont = new Font(Font.FontFamily.HELVETICA, 18, Font.BOLD); Paragraph title = new Paragraph("报表标题", ...
使用`Paragraph`或`Chunk`对象添加文本到PDF。例如: ```java Paragraph paragraph = new Paragraph("Hello, World!"); document.add(paragraph); ``` 3. **设置字体和样式**: Itext允许自定义字体和样式。...
- **基本概念**:了解Itext的基本元素,如块(Chunk)、短语(Phrase)、段落(Paragraph)等,它们是构建文档内容的基础。 - **字体处理**:理解如何设置字体,包括大小、样式和颜色,例如通过`FontFactory.getFont...
- **`Paragraph`**:包含一系列`Phrase`或`Chunk`的对象,用于表示段落。 - **`TableWrapper`**:用于处理简单的表格布局。 - **`PdfPTable`**:处理复杂的表格布局。 - **`Image`**:用于插入图像到PDF文档中。 - *...
在iText中,文本内容可以通过Chunk、Phrase和Paragraph来组织。 - 最后,完成写入后关闭Document对象。 4. iText中处理中文显示的问题:默认的iText字体设置不支持中文字体,因此需要下载并引入iTextAsian.jar包,...
- `Table`:创建表格,可以指定列数和行数,每个单元格可以填充`Phrase`或`Chunk`。 - `Image`:插入图像到PDF中,需要`BaseFont`来指定字体,以正确显示图像中的文字。 5. **文档属性** iText允许设置PDF文档的...
7. **布局控制**:使用`Chunk`、`Paragraph`、`List`、`Table`等类可以实现更复杂的布局。例如,创建一个简单的表格: ```java import com.itextpdf.text.Table; import com.itextpdf.text.cell.Cell; Table table...
PdfPCell cell = new PdfPCell(new Phrase(textChunk)); table.addCell(cell); ``` 7. **导出PDF**: 当所有内容添加完成后,调用`Document.close()`关闭文档,此时文件会被保存到指定位置。 8. **其他高级...
在“支票请求”的场景中,可以通过循环遍历数据集,并使用`Chunk`、`Paragraph`、`Table`等类构建和添加内容。 4. **样式设置**:为了使PDF文档更加专业,可以使用`Font`、`Phrase`等类来设置字体、颜色、大小等样式...