iText5-PDF

简介

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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值