简介
iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。
使用
首先我们要下载jar包,下面是我用的版本
- itext-asian.jar(5.2.0) (中文适配)
- itextpdf-5.5.6.jar
- itext-pdfa-5.5.6.jar
- itext-xtra-5.5.6.jar
弄好了之后就开始写代码了,待会我会把解释都写在代码里面
生成一个简单的pdf
public static void main(String[] args) throws DocumentException,IOException, InterruptedException {
//创建文档
Document doc = new Document();
//建立一个书写器
PdfWriter writer = PdfWriter.getInstance(doc,new FileOutputStream("D:测试.pdf"));
//打开文档
doc.open();
//添加内容
doc.add(new Paragraph("HolleWorld"));
//关闭文档
doc.close();
//关闭书写器
writer.close();
}
结果:
添加文件的基本信息
public static void main(String[] args) throws DocumentException,IOException, InterruptedException {
//创建文档
Document document = new Document();
//建立一个书写器
PdfWriter writer = PdfWriter.getInstance(document,new FileOutputStream("D:测试.pdf"));
//打开文档
document.open();
//添加内容
document.add(new Paragraph("HolleWorld"));
//设置属性
//标题
document.addTitle("测试");
//作者
document.addAuthor("Fatsugar");
//主题
document.addSubject("测试测试");
//关键字
document.addKeywords("傻逼");
//创建时间
document.addCreationDate();
//应用程序
document.addCreator("aaaaaaa.com");
//关闭文档
document.close();
//关闭书写器
writer.close();
}
不多做解释了自己看
文本和字体
输出中文字体三种方式
- 使用itext-asian.jar中的中文字体:BaseFont.createFont(“STSong-Light”, “UniGB-UCS2-H”, BaseFont.NOT_EMBEDDED);
- 使用Windows系统字体:BaseFont.createFont(“C:/WINDOWS/Fonts/SIMYOU.TTF”, BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
- 使用资源字体:BaseFont.createFont("/SIMYOU.TTF", BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
字体结合段落和文本块
Font :字体设置
Paragraph:段落
Chunk:文本块
public static void main(String[] args) throws DocumentException,IOException, InterruptedException {
//创建文档
Document document = new Document();
//建立一个书写器
PdfWriter writer = PdfWriter.getInstance(document,new FileOutputStream("D:测试.pdf"));
//打开文档
document.open();
//输出中文字体方式
BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font font = new Font(bf,20,Font.BOLD); //字体颜色有三个参数,输出中文格式,字体大小,字体特点比如加粗
Paragraph paragraph = new Paragraph("测试段落",font); //段落
paragraph.setFirstLineIndent(14); //缩进
paragraph.setAlignment(1); //1为居中对齐、2为右对齐、3为左对齐,默认为左对齐
Chunk temp = new Chunk("测试文本块",font);
temp.setBackground(BaseColor.BLUE); //背景颜色
temp.setTextRise(10); //文本框大小
//添加内容
document.add(paragraph);
document.add(temp);
//关闭文档
document.close();
//关闭书写器
writer.close();
}
慢慢看 能看懂的
设置表格
PdfPTable:表格
PdfPCell:单元格
public static void main(String[] args) throws DocumentException,IOException, InterruptedException {
//创建文档
Document document = new Document();
//建立一个书写器
PdfWriter writer = PdfWriter.getInstance(document,new FileOutputStream("D:测试.pdf"));
//打开文档
document.open();
//输出中文字体方式
BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font normal_font = new Font(bf,10,Font.NORMAL);//表格字体字体
PdfPTable table = new PdfPTable(12); //创建一个表格有12列
for (int i = 0; i < 24; i++) { //添加两行数据
PdfPCell cell = new PdfPCell(); //创建单元格
Chunk chunk = new Chunk("1"+i,normal_font); //创建文本块
cell.addElement(chunk);
cell.setUseDescender(true); //设置居中,感觉没用...
cell.setHorizontalAlignment(Element.ALIGN_CENTER);//设置字体水平居中
cell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);//设置字体垂直居中
table.addCell(cell); //将文本块加入单元格
}
float[] columnWidths = { 0.5f,1.5f,1f,1f,1f,1f,1f,1f,1f,1f,1f,1f}; //设置每列的宽度
table.setWidths(columnWidths); //添加每列的宽度
table.setWidthPercentage(100); //设置表格大小
//添加内容
document.add(table);
//关闭文档
document.close();
//关闭书写器
writer.close();
}
添加图片
Image:设置图片
public static void main(String[] args) throws DocumentException,IOException, InterruptedException {
//创建文档
Document document = new Document();
//建立一个书写器
PdfWriter writer = PdfWriter.getInstance(document,new FileOutputStream("D:测试.pdf"));
//打开文档
document.open();
Image image = Image.getInstance("D://graph//233833-1607355513c763.jpg");
image.scaleToFit(500f, 600f); //图片大小 宽度,高度
image .setAlignment(Image.MIDDLE); //图片居中 Image.RIGHT、Image.MIDDLE、Image.LEFT分别指右对齐、居中、左对齐
document.add(image);
//关闭文档
document.close();
//关闭书写器
writer.close();
}
OK 这些就是我用过的
iText里面方法和属性详细解析
花了我半天从网上找的资料,被我整合了 ( T_T )真滴累,TMD官网居然没有5版本的资料了。
Document-文件对象
函数函数
public Document();
public Document(Rectangle pageSize);
public Document(Rectangle pageSize,
int marginLeft,
int marginRight,
int marginTop,
int marginBottom);
第一个是默认页面(A4,36,36,36,36)
第二个可以自己设置页面,也可以使用rotate()函数
Document document = new Document(PageSize.A4.rotate());
第三个是当创建一个文件时,你还可以定义上、下、左、右页边距
Document document = new Document(PageSize.A5, 36, 72, 108, 180);
方法
addTitle(String title) //标题
addSubject(String subject) //主题
addKeywords(String keywords) //关键字
addAuthor(String author) //作者
addCreator(String creator) //应用程序
addCreationDate() //创建时间
add() //添加
newPage() //下一页
Rectangle-页面对象
构造函数
Rectangle(final float llx, final float lly, final float urx, final float ury)
Rectangle(PageSize.A4)
第一个是设置页面大小的
第二个是封装了大量常用的Rectangle数据
方法
rotate() //横向打印
setBackgroundColor(BaseColor color) //设置背景颜色
setBorder(int size) //边距
setBorderColor(BaseColor color) //边框颜色
setBorderWidth(float width) //边框宽度
Writer-页面内容对象
Writer 类的构造函数是私有的,你只能通过下面的方法创建一个实例
public static xxxWriter getInstance(Document document, Streamos);(xxx 是 Pdf 或 Xml)
你可以这样调用
PdfWriter writer = PdfWriter.getInstance(document, newFileStream("Chap01xx.pdf"));
方法
setPageEmpty(boolean bool) //是否显示空内容页
Chunk-文本块
可以初始化的时候设置字体
Chunk temp = new Chunk("",FontFactory.getFont(FontFactory.HELVETICA, 20, Font.NORMAL));
setBackground(BaseColor color) //添加背景颜色
setFont(Font font) //添加字体
setTextRise(float fudo) // 浮动
setUnderline(float num, float num ) // 下划线
Phrase-短语
setLeading(float size) //行间距
Paragraph-段落
可以初始化的时候设置字体
Paragraph paragraph = new Paragraph(String name,Font font);
add(Element) //添加
setLeading(float size) //行间距
setIndentationLeft(float num) //左缩进
setIndentationRight(float num) //右缩进
setFirstLineIndent(float num) //首行缩进
setSpacingBefore(float num) //设置上空白
setSpacingAfter(float num) //设置下空白
setAlignment(Element.ALIGN_CENTER) //居中对齐 可以添数字 1为居中
setFont(Font font) //添加字体
Image-图片
初始化
Image img = Image.getInstance(“图片路径”);
setAlignment(Image.LEFT) //对齐方式
setBorder(Image.BOX) //边框
setBorderWidth(float num) //边框宽度
setBorderColor(BaseColor.WHITE) //边框颜色
scaleToFit(float width, float heigth) //图片宽度,高度
setRotationDegrees(float xz) //旋转
setAbsolutePosition() //绝对位置
Anchor-锚点
外部链接示例:
Anchor anchor = new Anchor("website",
FontFactory.getFont(FontFactory.HELVETICA, 12, Font.UNDERLINE, new
Color(0, 0, 255)));
anchor.Reference = "http://itextsharp.sourceforge.net";
anchor.Name = "website";
内部链接示例:
Anchor anchor1 = new Anchor("This is an internal link");
anchor1.Name = "link1";
Anchor anchor2 = new Anchor("Click here to jump to the internal
link");
anchor.Reference = "#link1";
PdfPTable-表格
构造函数
PdfPTable datatable = new PdfPTable(int num); //列数
PdfPTable datatable = new PdfPTable(float[] num); //数组下标代表列,值代表单元格宽度
方法
setWidths(float[] list) //单元格宽度
setTotalWidth(float width) //表格的总宽度
setWidthPercentage(100) //表格的宽度百分比
setLockedWidth(boolean bool) //宽度锁定
setPadding(float num) //单元格的间隔
setBackgroundColor(BaseColor color) //背景色
setSpacingAfter(float num) //设置表格下面空白行,
setSpacingBefore(float num) //设置表格上面空白行
setHorizontalAlignment(int num) //对齐方式
getDefaultCell() //得到默认单元格
addCell(PdfPCell cell) //添加单元格
绝对位置
PdfContentByte tContent = writer.getDirectContent() //得到层
//写入绝对位置
table.writeSelectedRows(int num,int num,int num,int num, float num, float num, tContent)
PdfPCell-单元格
setBackgroundColor(BaseColor color) //背景色
setMinimumHeight(float num) //最小高度
setFixedHeight(float num) //固定高度。表格的高度通过单元格高度完成
setBorder(Rectangle.NO_BORDER) //无边框
setBorderWidth(int num) //设置边框大小,为0无边框,默认是有边框的
setBorderColor(new BaseColor(255, 0, 0)) //边框颜色
setHorizontalAlignment(Element.ALIGN_CENTER) //水平居中 Element.ALIGN_LEFT、Element.ALIGN_CENTER、Element.ALIGN_RIGHT
setVerticalAlignment(Element.ALIGN_MIDDLE) //垂直居中。设置单元格内容的显示 Element.ALIGN_TOP、Element.ALIGN_MIDDLE、Element.ALIGN_BOTTOM
setRowspan(int num) //跨行
setColspan(int num) //跨列
disableBorderSide(int num) //隐藏边框,12是隐藏左右边框
1代表上边框 2代表下边框 4代表左边框 8代表右边框
需要隐藏那些边框就把对应的值加起来,得到的和就是要设置的值
比如要隐藏左右边框 就是 4+8=12
使用
加入段落或者文本块
PdfPCell cell = new PdfPCell();
Paragraph paragraph = new Paragraph("字符串",Font font);
Chunk chunk = new Chunk("字符串",Font font);
cell.addElement(chunk);
cell.addElement(paragraph );
字体设置必须加入中文支持
//设置中文支持
BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font font = new Font(baseFont,15,Font.BOLD);
LineSeparator-虚线
//1.线宽度
//2.直线长度,是个百分百,0-100之间
//3.直线颜色
//4.直线位置
//5.上下移动位置
LineSeparator line = new LineSeparator(2f,100,BaseColor.RED,Element.ALIGN_CENTER,-5f);