java使用iText 生成PDF全攻略,包括创建文档,设置字体,添加表格(PdfPTable),创建新页(newPage),设置布局,加密
主要使用的jar包: itextpdf-5.4.2.jar,itext-pdfa-5.4.2.jar,itext-xtra-5.4.2.jar,如果用到中文,需要CJK字体的扩展包:itext-asian.jar
如果用到特殊符号的,需要另一个扩展包:itext-hyph-xml.jar。所有这些使用的jar包都可以在itext 5.4.2 官方下载地址:itext-5.4.2.zip
运行环境: java version 1.6.0_18 + iText 5.4.2
创建文档
package com.pdf;
import java.io.FileOutputStream;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.Font;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfWriter;
public class ItextHelloword {
public static void test() {
// 常用页面大小 PageSize.A4;
Document doc = new Document(PageSize.A4);
try {
// 定义输出位置并把文档对象装入输出对象中
PdfWriter.getInstance(doc,
new FileOutputStream("f:/hello.pdf"));
// 打开文档对象
doc.open();
// 加入文字"HelloWorld"
doc.add(new Paragraph("HelloWorld"));
// 关闭文档对象,释放资源
doc.close(); } catch (Exception e) { e.printStackTrace(); } } }
设置字体
亚洲国家的字体你可以从http://itext.sourceforge.net/downloads/iTextAsian.jar下载这个包。然后把它直接放到你的ClassPath中就可以了
BaseFont bfChinese = BaseFont.createFont("STSong-Light"
, "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font FontChinese = new Font(bfChinese, 12, Font.NORMAL);
表格
package com.pdf;
import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.Cell;
import com.EnumTypeExampe.Color;
import com.itextpdf.awt.geom.Rectangle;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
public class ItextHelloword {
/**
* @param args
*/
public static void main(String[] args)
throws Exception {
test() ;
}
public static void test() {
// 常用页面大小 PageSize.A4;
Document doc = new Document(PageSize.A4);
try {
// 定义输出位置并把文档对象装入输出对象中
PdfWriter writer=PdfWriter.getInstance(doc,
new FileOutputStream("f:/hello.pdf"));
// 定义中文字体
BaseFont bfChinese = BaseFont.createFont("STSong-Light",
"UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font fontCN = new Font(bfChinese, 12,
Font.NORMAL);
// 打开文档对象
doc.open();
// 加入文字"HelloWorld"
doc.add(new Paragraph("HelloWorld"));
//定义一个表格 创建一个有3列的表格
PdfPTable table = new PdfPTable(3);
// 定义一个表格单元
PdfPCell cell = new PdfPCell(
new Paragraph("some text"));
// cell.setBorder(1);
// 把单元加到表格中
table.addCell(cell);
// 把下面这9项顺次的加入到表格中,当一行充满时候自动折行到下一行
table.addCell("1.1");
table.addCell("2.1");
table.addCell("3.1");
table.addCell("1.2");
table.addCell("2.2");
table.addCell("3.2");
table.addCell("1.3");
table.addCell("2.3");
table.addCell("3.3");
// 增加到文档中
doc.add(table);
doc.add(new Paragraph("居右 50%", fontCN));
// 设置表格大小为可用空白区域的50%
table.setWidthPercentage(50);
// 设置水平对齐方式为 居右
table.setHorizontalAlignment(Element.ALIGN_RIGHT);
doc.add(new Paragraph("居左 50%", fontCN));
// 增加到文档中3
doc.add(table);
// 设置水平对齐方式为 居左
table.setHorizontalAlignment(Element.ALIGN_LEFT);
doc.add(table);
// 关闭文档对象,释放资源
doc.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
创建新页
// 创建第2的页面
document.newPage();
document.add(new Paragraph("Hello Earth"));
document.resetHeader();
// 创建第3的页面
document.newPage();
document.add(new Paragraph("Hello Sun"));
document.add(new Paragraph("Remark: the header has vanished!"));
document.resetPageCount();
加密
public static void test() {
// 常用页面大小 PageSize.A4;
Document doc = new Document(PageSize.A4);
try {
// 定义输出位置并把文档对象装入输出对象中
PdfWriter writer=PdfWriter.getInstance(doc,
new FileOutputStream("f:/hello.pdf"));
// 打开文档对象
doc.open();
// 加入文字"HelloWorld"
doc.add(new Paragraph("HelloWorld"));
// setEncryption方法中可以设置如下内容(这样打开pdf时需要输入口令)
// PdfWriter.STRENGTH128BITS, "userpass", "ownerpass",
// PdfWriter.AllowCopy | PdfWriter.AllowPrinting
writer.setEncryption("userpassword".getBytes()
, "ownerPassword".getBytes(), PdfWriter.ALLOW_COPY
, PdfWriter.EMBEDDED_FILES_ONLY);
// writer.setEncryption(PdfWriter.STRENGTH40BITS,
//"", "", PdfWriter.AllowCopy);
// 关闭文档对象,释放资源
doc.close();
} catch (Exception e) {
e.printStackTrace();
}
}
以下图片是上面代码中生成的表格: