`
reymont
  • 浏览: 529454 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

itext Chunk Phrase Paragraph区别

    博客分类:
  • PDF
阅读更多

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
分享到:
评论

相关推荐

    itext 中文帮助手册

    `Paragraph` 和 `Chunk` 类用于创建文本段落和单个文本块。可以使用 `Chunk` 创建中文字符,然后将其添加到 `Paragraph` 中。 ```java Paragraph paragraph = new Paragraph(); paragraph.add(new Chunk("你好,...

    itextpdf.zip

    对于文本,可以使用Paragraph或Chunk对象,设置字体、大小和颜色: ```java Font font = new Font(Font.FontFamily.HELVETICA, 12, Font.NORMAL); Paragraph paragraph = new Paragraph("Hello, World!", font); ...

    itext 生成pdf 文件

    可以使用`Chunk`、`Paragraph`、`ColumnText`等类进行更复杂的版式布局,如多列文本、对齐方式等。 8. **事件和回调** iText允许注册事件监听器,如页眉页脚的添加,可以通过实现`PdfPageEvent`接口。 9. **安全...

    itext

    iText提供Paragraph、Chunk、Image等类来添加文本和图像。例如,向文档添加一段文字: ```java Paragraph paragraph = new Paragraph("这是添加的文本"); document.add(paragraph); ``` 要插入图片,可以这样操作...

    itext导出PDF

    iText提供了`Paragraph`、`Chunk`和`Font`类来处理文本。你可以创建`Paragraph`对象,然后通过`add()`方法将`Chunk`对象(包含具体文本和格式)添加到段落中。`Font`类则用于设置文本的字体、大小、颜色等样式。 3...

    itext5的jar包

    `Chunk`是基本的文本元素,`Paragraph`用于组织多个`Chunk`。例如: ```java Paragraph paragraph = new Paragraph(); paragraph.add(new Chunk("Hello, World!", FontFactory.getFont(FontFactory.HELVETICA)));...

    使用itext 5.5 输出pdf的使用例子,初学者可以拿来参考

    5. **添加文本**:通过`Paragraph`、`Chunk`类添加文本到PDF。例如: ```java Paragraph paragraph = new Paragraph("Hello, World!"); document.add(paragraph); ``` ```csharp Paragraph paragraph = new ...

    java 用iText导出PDF小例子

    比如,`Document`类用于表示整个文档,`PdfWriter`类用于写入PDF内容,而`Paragraph`、`Chunk`和`Phrase`等类用于表示文档中的文本内容。这些类的使用方法构成了创建PDF文件的基础。 在Java代码中,首先需要导入...

    iText In Action Second Edition

    - **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 ...

    java 打印报表,用iText实现实例

    使用 `Paragraph`、`Chunk`、`Font` 等类可以添加文本。例如,添加一段标题: ```java Font titleFont = new Font(Font.FontFamily.HELVETICA, 18, Font.BOLD); Paragraph title = new Paragraph("报表标题", ...

    java中itext生成pdf

    使用`Paragraph`或`Chunk`对象添加文本到PDF。例如: ```java Paragraph paragraph = new Paragraph("Hello, World!"); document.add(paragraph); ``` 3. **设置字体和样式**: Itext允许自定义字体和样式。...

    Itext控件 介绍如何导出word文档 不需要Word

    - **基本概念**:了解Itext的基本元素,如块(Chunk)、短语(Phrase)、段落(Paragraph)等,它们是构建文档内容的基础。 - **字体处理**:理解如何设置字体,包括大小、样式和颜色,例如通过`FontFactory.getFont...

    iText总结文档

    - **`Paragraph`**:包含一系列`Phrase`或`Chunk`的对象,用于表示段落。 - **`TableWrapper`**:用于处理简单的表格布局。 - **`PdfPTable`**:处理复杂的表格布局。 - **`Image`**:用于插入图像到PDF文档中。 - *...

    利用iText包实现Java报表打印

    在iText中,文本内容可以通过Chunk、Phrase和Paragraph来组织。 - 最后,完成写入后关闭Document对象。 4. iText中处理中文显示的问题:默认的iText字体设置不支持中文字体,因此需要下载并引入iTextAsian.jar包,...

    生成pdf文件

    - `Table`:创建表格,可以指定列数和行数,每个单元格可以填充`Phrase`或`Chunk`。 - `Image`:插入图像到PDF中,需要`BaseFont`来指定字体,以正确显示图像中的文字。 5. **文档属性** iText允许设置PDF文档的...

    java生成pdf文件

    7. **布局控制**:使用`Chunk`、`Paragraph`、`List`、`Table`等类可以实现更复杂的布局。例如,创建一个简单的表格: ```java import com.itextpdf.text.Table; import com.itextpdf.text.cell.Cell; Table table...

    java生成pdf字体和模板

    PdfPCell cell = new PdfPCell(new Phrase(textChunk)); table.addCell(cell); ``` 7. **导出PDF**: 当所有内容添加完成后,调用`Document.close()`关闭文档,此时文件会被保存到指定位置。 8. **其他高级...

    pd模板、java

    在“支票请求”的场景中,可以通过循环遍历数据集,并使用`Chunk`、`Paragraph`、`Table`等类构建和添加内容。 4. **样式设置**:为了使PDF文档更加专业,可以使用`Font`、`Phrase`等类来设置字体、颜色、大小等样式...

Global site tag (gtag.js) - Google Analytics