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
分享到:
相关推荐
java使用itextpdf、itext-asian对pdf文件加中文文字水印,此demo只提供参考,希望给需要的朋友带来帮助,谢谢支持!
导入 <groupId>org.xhtmlrenderer <artifactId>core-renderer <version>R8 直接根目录下新建包org.xhtmlrenderer.layout 覆盖jar
iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。 iText的安装非常方便,在...
IText 和 ITextAsian 的开发包
itext-1.01.jar和iTextAsian.jar这两个包是支持 HTML、RTF 和 XML 文档的生成,此外还能够生成 PDF 文档
java解决Itext生成PDF中文不换行的问题
itext中文: public static void main(String[] args) { try { Document document = new Document(); OutputStream os = new FileOutputStream(new File("C:\\Users\\Administrator\\Desktop\\test.pdf")); ...
多个版本的itext-jar包, itext-2.0.4/itext-2.1.5/itext-2.1.7
iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。 iText的安装非常方便,下载iText.jar文件后,...
itext 生成pdf 目录,itext 生成pdf 目录,itext 生成pdf 目录
Itext5.5.13 完整的全套包,包含bcpkix-jdk15on-1.47.jar bcprov-jdk15on-1.59.jar itext-asian-5.2.0.jar itext-hyph-xml-5.1.1.jar itext-pdfa-5.5.13-javadoc.jar itext-pdfa-5.5.13-sources.jar itext-pdfa-...
赠送jar包:itext-2.1.7.jar; 赠送原API文档:itext-2.1.7-javadoc.jar; 赠送源代码:itext-2.1.7-sources.jar; 赠送Maven依赖信息文件:itext-2.1.7.pom; 包含翻译后的API文档:itext-2.1.7-javadoc-API文档-...
iText7jar和英文文档,以及itext5的一些文档。建议大家去官网看itext7,改动有点大。我也在摸索中。
最近在做项目用到jasperreports6.5.0,该库依赖itext2.7.1版本比较旧,又不能升级itext为5.0以上。照成中文无法显示,因此打了两个字体库兼容itext2.7.1。项目完美显示中文字体。 使用方法: 1、将字体jar文件拷贝...
itext 生成pdf的中文帮助文档,具体有:图片、块(下划线/删除线、上标/下标)、短句、段落等。
iText1.2.7、iText-rtf2.1.7、iTextAsian
iText-5.0.6.jar iTextAsian.jar
itext 操作PDF需要的jar包
java的PDF生成jar包,包含 iText-5.5.8.jar, iTextAsian.jar, itextpdf-5.5.8, itextpdf-5.5.8-javadoc, itext-xtra-5.5.8, xmlworker-5.5.8。 已打包中文字体
IText7jar集合