官网: http://itextsupport.com/apidocs/itext5/latest/
博文: https://blog.csdn.net/u010154380/article/details/78087663
博文: https://blog.csdn.net/u013129932/article/details/43889705
iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。
项目要使用iText,必须引入jar包。才能使用,maven依赖如下:
<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.10</version></dependency>
输出中文,还要引入下面itext-asian.jar包:
<dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency>
设置pdf文件密码,还要引入下面bcprov-jdk15on.jar包:
<dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.54</version></dependency>
iText常用类
com.itextpdf.text.Document:这是iText库中最常用的类,它代表了一个pdf实例。如果你需要从零开始生成一个PDF文件,你需要使用这个Document类。首先创建(new)该实例,然后打开(open)它,并添加(add)内容,最后关闭(close)该实例,即可生成一个pdf文件。
com.itextpdf.text.Paragraph:表示一个缩进的文本段落,在段落中,你可以设置对齐方式,缩进,段落前后间隔等
com.itextpdf.text.Chapter:表示PDF的一个章节,他通过一个Paragraph类型的标题和整形章数创建
com.itextpdf.text.Font:这个类包含了所有规范好的字体,包括family of font,大小,样式和颜色,所有这些字体都被声明为静态常量
com.itextpdf.text.List:表示一个列表;
com.itextpdf.text.Anchor:表示一个锚,类似于HTML页面的链接。
com.itextpdf.text.pdf.PdfWriter:当这个PdfWriter被添加到PdfDocument后,所有添加到Document的内容将会写入到与文件或网络关联的输出流中。
com.itextpdf.text.pdf.PdfReader:用于读取PDF文件;
iText使用
创建一个简单的pdf文件,如下:
packagecom.hd.pdfimportjava.io.FileNotFoundExceptionimportjava.io.FileOutputStreamimportcom.itextpdf.text.Documentimportcom.itextpdf.text.DocumentExceptionimportcom.itextpdf.text.Paragraphimportcom.itextpdf.text.pdf.PdfWriterpublicclassTestPDFDemo1{publicstaticvoidmain(String[]args)throws FileNotFoundException,DocumentException{// 1.新建document对象Document document=newDocument()// 2.建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中。// 创建 PdfWriter 对象 第一个参数是对文档对象的引用,第二个参数是文件的实际名称,在该名称中还会给出其输出路径。PdfWriter writer=PdfWriter.getInstance(document,newFileOutputStream("C:/Users/H__D/Desktop/test.pdf"))// 3.打开文档document.open()// 4.添加一个内容段落document.add(newParagraph("Hello World!"))// 5.关闭文档document.close()}}
打开文件
851491-20161209165247147-746087588.png
PDF中创建表格
publicstaticvoidmain(String[]args)throws DocumentException,FileNotFoundException{//创建文件Document document=newDocument()//建立一个书写器PdfWriter writer=PdfWriter.getInstance(document,newFileOutputStream("C:/Users/H__D/Desktop/test4.pdf"))//打开文件document.open()//添加内容document.add(newParagraph("HD content here"))// 3列的表.PdfPTable table=newPdfPTable(3)table.setWidthPercentage(100)// 宽度100%填充table.setSpacingBefore(10f)// 前间距table.setSpacingAfter(10f)// 后间距List<PdfPRow>listRow=table.getRows()//设置列宽float[]columnWidths={1f,2f,3f}table.setWidths(columnWidths)//行1PdfPCell cells1[]=newPdfPCell[3]PdfPRow row1=newPdfPRow(cells1)//单元格cells1[0]=newPdfPCell(newParagraph("111"))//单元格内容cells1[0].setBorderColor(BaseColor.BLUE)//边框验证cells1[0].setPaddingLeft(20)//左填充20cells1[0].setHorizontalAlignment(Element.ALIGN_CENTER)//水平居中cells1[0].setVerticalAlignment(Element.ALIGN_MIDDLE)//垂直居中cells1[1]=newPdfPCell(newParagraph("222"))cells1[2]=newPdfPCell(newParagraph("333"))//行2PdfPCell cells2[]=newPdfPCell[3]PdfPRow row2=newPdfPRow(cells2)cells2[0]=newPdfPCell(newParagraph("444"))//把第一行添加到集合listRow.add(row1)listRow.add(row2)//把表格添加到文件中document.add(table)//关闭文档document.close()//关闭书写器writer.close()}
打开图片
851491-20161209165247147-746087588.png
给PDF文件设置文件属性,例如:
publicstaticvoidmain(String[]args)throws FileNotFoundException,DocumentException{//创建文件Document document=newDocument()//建立一个书写器PdfWriter writer=PdfWriter.getInstance(document,newFileOutputStream("C:/Users/H__D/Desktop/test2.pdf"))//打开文件document.open()//添加内容document.add(newParagraph("Some content here"))//设置属性//标题document.addTitle("this is a title")//作者document.addAuthor("H__D")//主题document.addSubject("this is subject")//关键字document.addKeywords("Keywords")//创建时间document.addCreationDate()//应用程序document.addCreator("hd.com")//关闭文档document.close()//关闭书写器writer.close()}
打开文件
851491-20161209165247147-746087588.png
PDF中添加图片
publicstaticvoidmain(String[]args)throws DocumentException,IOException{//创建文件Document document=newDocument()//建立一个书写器PdfWriter writer=PdfWriter.getInstance(document,newFileOutputStream("C:/Users/H__D/Desktop/test3.pdf"))//打开文件document.open()//添加内容document.add(newParagraph("HD content here"))//图片1Image image1=Image.getInstance("C:/Users/H__D/Desktop/IMG_0109.JPG")//设置图片位置的x轴和y周image1.setAbsolutePosition(100f,550f)//设置图片的宽度和高度image1.scaleAbsolute(200,200)//将图片1添加到pdf文件中document.add(image1)//图片2Image image2=Image.getInstance(newURL("http://static.cnblogs.com/images/adminlogo.gif"))//将图片2添加到pdf文件中document.add(image2)//关闭文档document.close()//关闭书写器writer.close()}
打开图片
851491-20161209165247147-746087588.png
PDF中创建列表
publicstaticvoidmain(String[]args)throws DocumentException,FileNotFoundException{//创建文件Document document=newDocument()//建立一个书写器PdfWriter writer=PdfWriter.getInstance(document,newFileOutputStream("C:/Users/H__D/Desktop/test5.pdf"))//打开文件document.open()//添加内容document.add(newParagraph("HD content here"))//添加有序列表List orderedList=newList(List.ORDERED)orderedList.add(newListItem("Item one"))orderedList.add(newListItem("Item two"))orderedList.add(newListItem("Item three"))document.add(orderedList)//关闭文档document.close()//关闭书写器writer.close()}
打开文件
851491-20161209180029726-1168732515.png
PDF中设置样式/格式化输出,输出中文内容,必须引入itext-asian.jar
publicstaticvoidmain(String[]args)throws DocumentException,IOException{//创建文件Document document=newDocument()//建立一个书写器PdfWriter writer=PdfWriter.getInstance(document,newFileOutputStream("C:/Users/H__D/Desktop/test6.pdf"))//打开文件document.open()//中文字体,解决中文不能显示问题BaseFont bfChinese=BaseFont.createFont("STSong-Light","UniGB-UCS2-H",BaseFont.NOT_EMBEDDED)//蓝色字体Font blueFont=newFont(bfChinese)blueFont.setColor(BaseColor.BLUE)//段落文本Paragraph paragraphBlue=newParagraph("paragraphOne blue front",blueFont)document.add(paragraphBlue)//绿色字体Font greenFont=newFont(bfChinese)greenFont.setColor(BaseColor.GREEN)//创建章节Paragraph chapterTitle=newParagraph("段落标题xxxx",greenFont)Chapter chapter1=newChapter(chapterTitle,1)chapter1.setNumberDepth(0)Paragraph sectionTitle=newParagraph("部分标题",greenFont)Section section1=chapter1.addSection(sectionTitle)Paragraph sectionContent=newParagraph("部分内容",blueFont)section1.add(sectionContent)//将章节添加到文章中document.add(chapter1)//关闭文档document.close()//关闭书写器writer.close()}
打开图片
![
851491-20161209180029726-1168732515.png
]
851491-20161209165247147-746087588.png
给PDF文件设置密码,需要引入bcprov-jdk15on.jar包:
publicstaticvoidmain(String[]args)throws DocumentException,IOException{// 创建文件Document document=newDocument()// 建立一个书写器PdfWriter writer=PdfWriter.getInstance(document,newFileOutputStream("C:/Users/H__D/Desktop/test8.pdf"))//用户密码String userPassword="123456"//拥有者密码String ownerPassword="hd"writer.setEncryption(userPassword.getBytes(),ownerPassword.getBytes(),PdfWriter.ALLOW_PRINTING,PdfWriter.ENCRYPTION_AES_128)// 打开文件document.open()//添加内容document.add(newParagraph("password !!!!"))// 关闭文档document.close()// 关闭书写器writer.close()}
打开图片
851491-20161209165247147-746087588.png
给PDF文件设置权限
publicstaticvoidmain(String[]args)throws DocumentException,IOException{// 创建文件Document document=newDocument()// 建立一个书写器PdfWriter writer=PdfWriter.getInstance(document,newFileOutputStream("C:/Users/H__D/Desktop/test9.pdf"))// 只读权限writer.setEncryption("".getBytes(),"".getBytes(),PdfWriter.ALLOW_PRINTING,PdfWriter.ENCRYPTION_AES_128)// 打开文件document.open()// 添加内容document.add(newParagraph("password !!!!"))// 关闭文档document.close()// 关闭书写器writer.close()}
读取/修改已有的PDF文件
publicstaticvoidmain(String[]args)throwsDocumentException,IOException{//读取pdf文件PdfReaderpdfReader=newPdfReader("C:/Users/H__D/Desktop/test1.pdf")//修改器PdfStamperpdfStamper=newPdfStamper(pdfReader,newFileOutputStream("C:/Users/H__D/Desktop/test10.pdf"))Imageimage=Image.getInstance("C:/Users/H__D/Desktop/IMG_0109.JPG")image.scaleAbsolute(50,50)image.setAbsolutePosition(0,700)for(inti=1i<=pdfReader.getNumberOfPages()i++){PdfContentBytecontent=pdfStamper.getUnderContent(i)content.addImage(image)}pdfStamper.close()}
itext 生成 PDF(二)
链接:https://www.jianshu.com/p/20d4905383b4
以WPS 2019版本为例:
关于怎么设置pdf页眉页脚,我们推荐您可考虑使用WPS2019来完成, *** 作步骤如下:
1、打开「PDF文档」;
2、点击「插入-页码」/「插入-页眉页脚」(提示该功能需开通WPS会员使用);
3、可根据需求设置页面或页眉页脚的参数来进行插入。
java itext5.0.6怎么设置页脚/**
* ITextTest
* iText生成PDF加入列表,注释等内容,同时设置页眉和页脚及页码等。
*/
package com.labci.itext.test
import <a href="http://lib.csdn.net/base/17" class='replace_word' title="Java EE知识库" target='_blank' style='color:#df3434font-weight:bold'>Java</a>.awt.Color
import java.io.FileNotFoundException
import java.io.FileOutputStream
import java.io.IOException
import com.lowagie.text.Annotation
import com.lowagie.text.Document
import com.lowagie.text.DocumentException
import com.lowagie.text.Font
import com.lowagie.text.HeaderFooter
import com.lowagie.text.List
import com.lowagie.text.ListItem
import com.lowagie.text.Phrase
import com.lowagie.text.Rectangle
import com.lowagie.text.pdf.BaseFont
import com.lowagie.text.pdf.PdfWriter
/**
* @author Bill Tu(tujiyue/iwtxokhtd)
* Jun 6, 2011[4:10:35 PM]
*
*/
public class ITextList {
private final static String RESULT_FILE="itext_list.pdf"
public static void main(String []args){
Document doc=new Document()
try {
PdfWriter.getInstance(doc, new FileOutputStream(RESULT_FILE))
BaseFont fontChinese=null
try {
fontChinese = BaseFont.createFont("STSong-Light","UniGB-UCS2-H",BaseFont.NOT_EMBEDDED)//设置中文字体
} catch (IOException e) {
e.printStackTrace()
}
Font chinese = new Font(fontChinese, 10, Font.NORMAL)
/**
* HeaderFooter的第2个参数为非false时代表打印页码
* 页眉页脚中也可以加入图片,并非只能是文字
*/
HeaderFooter header=new HeaderFooter(new Phrase("这仅仅是个页眉,页码在页脚处",chinese),false)
//设置是否有边框等
// header.setBorder(Rectangle.NO_BORDER)
header.setBorder(Rectangle.BOTTOM)
header.setAlignment(1)
header.setBorderColor(Color.red)
doc.setHeader(header)
HeaderFooter footer=new HeaderFooter(new Phrase("-",chinese),new Phrase("-",chinese))
/**
* 0是靠左
* 1是居中
* 2是居右
*/
footer.setAlignment(1)
footer.setBorderColor(Color.red)
footer.setBorder(Rectangle.BOX)
doc.setFooter(footer)
/**
* 页眉页脚的设置一定要在open前设置好
*/
doc.open()
/**
* true:代表要排序,10代表序号与文字之间的间距
* false:代表不排序,则文字前的符号为"-"
*/
List itextList=new List(true,10)
/**
* 也可以改变列表的符号[可选]
* $$$$$$$$$$$
* 要改变列表符号时,上面的List构造方法第一参数值必须为false
* $$$$$$$$$$$
* 可以使用字符串,Chunk,Image等作列表符号,如下
*/
//itextList.setListSymbol("*")
ListItem firstItem=new ListItem("first paragraph")
ListItem secondItem=new ListItem("second paragraph")
ListItem thirdItem=new ListItem("third paragraph")
itextList.add(firstItem)
itextList.add(secondItem)
itextList.add(thirdItem)
doc.add(itextList)
//添加注释,注释有标题和内容,注释可以是文本,内部链接,外部链接,图片等
Annotation annotation=new Annotation("what's this?","it's a tree and it is not a big")
doc.add(annotation)
doc.close()
} catch (FileNotFoundException e) {
e.printStackTrace()
} catch (DocumentException e) {
e.printStackTrace()
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)