封装PDF工具类.docx
- 文档编号:23505191
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:18
- 大小:19.70KB
封装PDF工具类.docx
《封装PDF工具类.docx》由会员分享,可在线阅读,更多相关《封装PDF工具类.docx(18页珍藏版)》请在冰豆网上搜索。
封装PDF工具类
五、封装PDF工具类
importjava.awt.Color;
importjava.awt.Point;
importjava.io.ByteArrayOutputStream;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.OutputStream;
import.MalformedURLException;
importjava.util.Date;
importjava.util.Iterator;
importjava.util.List;
importjava.util.Map;
importjavax.servlet.ServletOutputStream;
importjavax.servlet.http.HttpServletResponse;
importmons.logging.Log;
importmons.logging.LogFactory;
importcom.lowagie.text.Anchor;
importcom.lowagie.text.Annotation;
importcom.lowagie.text.BadElementException;
importcom.lowagie.text.Cell;
importcom.lowagie.text.Chapter;
importcom.lowagie.text.Chunk;
importcom.lowagie.text.Document;
importcom.lowagie.text.DocumentException;
importcom.lowagie.text.Element;
importcom.lowagie.text.Font;
importcom.lowagie.text.HeaderFooter;
importcom.lowagie.text.Image;
importcom.lowagie.text.ListItem;
importcom.lowagie.text.PageSize;
importcom.lowagie.text.Paragraph;
importcom.lowagie.text.Phrase;
importcom.lowagie.text.Rectangle;
importcom.lowagie.text.Section;
importcom.lowagie.text.Table;
importcom.lowagie.text.pdf.PdfWriter;
/**
*@authorJackChang
*@version創建時間:
Jan19,20104:
49:
26PM類說明
*/
publicclassPdfUtil{
privatestaticfinalLoglog=LogFactory.getLog(PdfUtil.class);//日志
/**
*导出PDF文档(最基本方法)到物理地址
*
*@param需要显示的数据集合,集合中一定要放置符合javabean风格的类的对象。
*@parampdfPath
* 导出pdf文档路径
*/
publicstaticvoidexportPdf(Stringcontent,StringpdfPath){
Documentdocument=null;
OutputStreamout=null;
try{
//1.建立com.lowagie.text.Document对象的实例
document=newDocument();
//2.建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中
out=newFileOutputStream(pdfPath);
PdfWriter.getInstance(document,out);
//3.打开文档
document.open();
//4.向文档中添加内容
document.add(newParagraph(content));//会中文乱码
}catch(FileNotFoundExceptione){
e.printStackTrace();
}catch(DocumentExceptione){
e.printStackTrace();
}finally{
document.close();//5.关闭文档
try{
out.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
/**
*导出一段话的pdf到物理地址
*
*@parampara
*@parampdfPath
*/
publicstaticvoidexportPdf(Paragraphpara,StringpdfPath,
booleanvertical){
Documentdoc=null;
OutputStreamout=null;
try{
//1.建立com.lowagie.text.Document对象的实例
doc=buildDoc(vertical);
//2.建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中
out=newFileOutputStream(pdfPath);
PdfWriter.getInstance(doc,out);
//3.打开文档
doc.open();
//4.向文档中添加内容
doc.add(para);
}catch(Exceptione){
e.printStackTrace();
log.debug("生成pdf出错");
}finally{
close(doc,out);//5.关闭
}
}
/**
*导出PDF到物理地址
*
*@paramdoc
*@paramelement
*@parampdfPath
*/
publicstaticvoidexportPdf(Documentdoc,Elementelement,StringpdfPath){
OutputStreamout=null;
try{
//2.建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中
out=newFileOutputStream(pdfPath);
PdfWriter.getInstance(doc,out);
//3.打开文档
doc.open();
//4.向文档中添加内容
doc.add(element);
}catch(Exceptione){
e.printStackTrace();
log.debug("生成pdf出错");
}finally{
close(doc,out);//5.关闭
}
}
/**
*导出pdf到物理地址
*
*@paramdoc
*@parampdfBean
*/
publicstaticvoidexprotPdf(Documentdoc,PdfBeanpdfBean){
OutputStreamout=null;
try{
//2.建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中
out=newFileOutputStream(pdfBean.getFileName());
PdfWriterwriter=gerPdfWriter(doc,out);
doc=setPdfProperty(doc,pdfBean);//设置属性
//加密处理
if(pdfBean.isEncryptFlag()){
ListpermissionList=pdfBean.getPermissionList();
if(permissionList!
=null&&permissionList.size()>0){
intallPermission=0;
for(Iteratorit=permissionList.iterator();it.hasNext();){
intpermission=(Integer)it.next();
allPermission=allPermission|permission;//有或运算来累加权限
}
writer=encrypt(writer,pdfBean.getUserPsw(),pdfBean
.getOwnerPsw(),allPermission);
}
}
//3.打开文档
doc.open();
//4.向文档中添加内容
ListelementList=pdfBean.getElementList();
if(elementList!
=null&&!
elementList.isEmpty()){
for(Iteratorit=elementList.iterator();it.hasNext();){
Elementelement=(Element)it.next();
doc.add(element);
}
}
}catch(Exceptione){
e.printStackTrace();
log.debug("生成pdf出错");
}finally{
close(doc,out);//5.关闭
}
}
/**
*导出pdf到url*
*@paramdoc
*@parampdfBean
*/
publicstaticvoidexprotPdfToUrl(Documentdoc,PdfBeanpdfBean,HttpServletResponseresponse){
ByteArrayOutputStreambao=null;
ServletOutputStreamout=null;
try{
//2.建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中
bao=newByteArrayOutputStream();
PdfWriterwriter=gerPdfWriter(doc,bao);
doc=setPdfProperty(doc,pdfBean);//设置属性
//加密处理
if(pdfBean.isEncryptFlag()){
ListpermissionList=pdfBean.getPermissionList();
if(permissionList!
=null&&permissionList.size()>0){
intallPermission=0;
for(Iteratorit=permissionList.iterator();it.hasNext();){
intpermission=(Integer)it.next();
allPermission=allPermission|permission;//有或运算来累加权限
}
writer=encrypt(writer,pdfBean.getUserPsw(),pdfBean
.getOwnerPsw(),allPermission);
}
}
//3.打开文档
doc.open();
//4.向文档中添加内容
ListelementList=pdfBean.getElementList();
if(elementList!
=null&&!
elementList.isEmpty()){
for(Iteratorit=elementList.iterator();it.hasNext();){
Elementelement=(Element)it.next();
doc.add(element);
}
}
doc.close();//关闭document
//response设置
response.setContentType("application/pdf");
/*=====添加下面一段,点击提示“另存为”,否则直接在浏览器中打开start=====*/
// response.setHeader("Content-Disposition","attachment;filename=\"temp.pdf\"");
// response.setHeader("Cache-Control","must-revalidate,post-check=0,pre-check=0");
// response.setHeader("Pragma","public");
// response.setDateHeader("Expires",(System.currentTimeMillis()+1000));
/*====添加下面一段,点击提示“另存为”,否则直接在浏览器中打开end======*/
response.setContentLength(bao.size());
out=response.getOutputStream();
bao.writeTo(out);
out.flush();
}catch(Exceptione){
e.printStackTrace();
log.debug("页面输出pdf出错");
}finally{
try{
bao.close();
out.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
/**
*块,PDF中,最小的单位
*@paramcontent
*@paramfont
*@return
*/
publicstaticChunkgetChunk(Stringcontent,Fontfont){
Chunkchunk=newChunk(content,font);
returnchunk;
}
/**
*短句
*@paramcontent
*@paramfont
*@return
*/
publicstaticPhrasegetPhrase(Stringcontent,Fontfont){
Phrasephrase=newPhrase(content,font);
returnphrase;
}
/**
*设置字段
*
*@paramcontent
*@paramfont
*@return
*/
publicstaticParagraphgetPara(Stringcontent,Fontfont){
Paragraphpara=newParagraph(content,font);
returnpara;
}
/**
*设定锚点(超链接)
*@paramcontent
*@paramfont
*@paramurl,如 或者#aim
*@return
*/
publicstaticAnchorgetAnchor(Stringcontent,Fontfont,Stringurl){
Anchoranchor=newAnchor(content,font);
anchor.setReference(url);
returnanchor;
}
/**
*设定列表
*@paramlist数据
*@paramnumberedtrue数字列表,false图标列表
*@paramsymbolIndent缩进true-20false-10
*@return
*/
publicstaticcom.lowagie.text.ListgetPdfList(Listlist,booleannumbered,floatsymbolIndent,Fontfont){
com.lowagie.text.ListpdfList=newcom.lowagie.text.List(numbered,symbolIndent);
ListItemli=null;
if(list!
=null&&!
list.isEmpty()){
for(Iteratorit=list.iterator();it.hasNext();){
li=newListItem(it.next().toString(),font);
pdfList.add(li);
}
}
returnpdfList;
}
/**
*设定注释(以右下角有顶点坐标(0,0)
*@paramtitle名称
*@paramtext内容
*@paramxlowerleftxpdf页面,下端,距左边多少px,如100,(x,y)相当于(100,0)
*@paramyupperrighty
*@return
*/
publicstaticAnnotationgetAnnotation(Stringtitle,Stringtext,floatx,floaty){
Annotationanno=newAnnotation(title,text,x,0f,0f,y);
returnanno;
}
/**
*url注释(一个块内有url链接)
*@paramurl
*@paramx
*@paramy
*@return
*/
publicstaticAnnotationgetAnnotationUrl(floatllx,floatlly,floaturx,floatury,Stringurl){
Annotationanno=newAnnotation(llx,lly,urx,ury,url);
returnanno;
}
/**
*取得章(页),AChapterisaspecialSection,继承了Section
*多new几个,就几页
*@paramcontent
*@paramfont
*@paramnumberDepth
*@return
*/
publicstaticChaptergetChapter(Stringcontent,Fontfont,intnumberDepth){
Paragraphp=getPara(content,font);
Chapterchapter=newChapter(p,numberDepth);
returnchapter;
}
/**
*区域(包含其他区域,段落,列表,表格)
*ASectionisapartofaDocumentcontainingotherSections,Paragraphs,Listand/orTables
*@paramcontent
*@paramfont
*@paramnumberDepth,注若为0,就不显示层级数
*@return
*/
publicstaticSectiongetSection(Chapterchapter,Stringcontent,Fontfont,intnumberDepth){
Paragraphp=getPara(content,font);
Sections=chapter.addSection(p,numberDepth);
returns;
}
/**
*区域(包含其他区域,段落,列表,表格)
*ASectionisapartofaDocumentcontainingotherSections,Paragraphs,Listand/orTables
*@paramcontent
*@paramfont
*@paramnumberDepth,注若为0,就不显示层级数
*@return
*/
publicstaticSectio
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 封装 PDF 工具