Java使用iTextPDF生成PDF文件的实现方法
iText介绍和说明
因为项目需要生成PDF文件,所以去找了一下能够生成PDF的Java工具,看到了iText可以说好评如潮。
如果你想通过java操作PDF文件,那么iText绝对是你的首选。
引入依赖
这里使用的是iText5
com.itextpdf itextpdf 5.5.10 com.itextpdf itext-asian 5.2.0
使用步骤简单介绍
快速入手iText拢共需要5步:
- 创建文档实例Document
- 获取PdfWriter实例(需要指定Document实例和pdf生成的磁盘路径)
- 打开文档
- 添加段落内容
- 关闭操作文档实例(操作完成后必须执行文档关闭操作)
创建工具类
publicclassPdfUtil{
//标准字体
publicstaticFontNORMALFONT;
//加粗字体
publicstaticFontBOLDFONT;
//固定高
publicstaticfloatfixedHeight=27f;
//间距
publicstaticintspacing=5;
static{
try{
BaseFontbfChinese=BaseFont.createFont("STSong-Light","UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);
NORMALFONT=newFont(bfChinese,10,Font.NORMAL);
BOLDFONT=newFont(bfChinese,14,Font.BOLD);
}catch(Exceptione){
e.printStackTrace();
}
}
publicstaticDocumentcreateDocument(){
//生成pdf
Documentdocument=newDocument();
//页面大小
Rectanglerectangle=newRectangle(PageSize.A4);
//页面背景颜色
rectangle.setBackgroundColor(BaseColor.WHITE);
document.setPageSize(rectangle);
//页边距左,右,上,下
document.setMargins(20,20,20,20);
returndocument;
}
/**
*@paramtext段落内容
*@return
*/
publicstaticParagraphcreateParagraph(Stringtext,Fontfont){
Paragraphelements=newParagraph(text,font);
elements.setSpacingBefore(5);
elements.setSpacingAfter(5);
elements.setSpacingAfter(spacing);
returnelements;
}
publicstaticFontcreateFont(intfontNumber,intfontSize,BaseColorfontColor){
//中文字体----不然中文会乱码
BaseFontbf=null;
try{
bf=BaseFont.createFont("STSong-Light","UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);
returnnewFont(bf,fontNumber,fontSize,fontColor);
}catch(Exceptione){
e.printStackTrace();
}
returnnewFont(bf,Font.DEFAULTSIZE,Font.NORMAL,BaseColor.BLACK);
}
/**
*隐藏表格边框线
*
*@paramcell单元格
*/
publicstaticvoiddisableBorderSide(PdfPCellcell){
if(cell!=null){
cell.disableBorderSide(1);
cell.disableBorderSide(2);
cell.disableBorderSide(4);
cell.disableBorderSide(8);
}
}
/**
*创建居中得单元格
*
*@return
*/
publicstaticPdfPCellcreateCenterPdfPCell(){
PdfPCellcell=newPdfPCell();
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
cell.setFixedHeight(fixedHeight);
returncell;
}
/**
*创建指定文字得单元格
*
*@paramtext
*@return
*/
publicstaticPdfPCellcreateCenterPdfPCell(Stringtext,introwSpan,intcolSpan,Fontfont){
PdfPCellcell=newPdfPCell(newParagraph(text,font));
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell.setHorizontalAlignment(Element.ALIGN_LEFT);
cell.setFixedHeight(fixedHeight);
cell.setRowspan(rowSpan);
cell.setColspan(colSpan);
returncell;
}
/**
*@paramlen表格列数
*@return
*/
publicstaticPdfPTablecreatePdfPTable(intlen){
PdfPTablepdfPTable=newPdfPTable(len);
pdfPTable.setSpacingBefore(5);
pdfPTable.setHorizontalAlignment(Element.ALIGN_CENTER);
returnpdfPTable;
}
}
创建controller进行测试
/**
*@authorWangGuolong
*@version1.0
*@date2020/6/283:17下午
*/
@RestController
@RequestMapping("/pdf")
publicclassPdfController{
@RequestMapping("/generate")
publicResponsegeneratePDF(HttpServletResponseresponse)throwsException{
Stringfilename="测试pdf";
//设置下载格式为pdf
response.setContentType("application/x-download");
response.addHeader("Content-Disposition","attachment;filename="+URLEncoder.encode(filename,"UTF-8")+".pdf");
OutputStreamos=newBufferedOutputStream(response.getOutputStream());
//1.Documentdocument=newDocument();
Documentdocument=PdfUtil.createDocument();
//2.获取writer
PdfWriter.getInstance(document,os);
//3.open()
document.open();
//设置字体
FontblackFont=PdfUtil.createFont(10,Font.NORMAL,BaseColor.BLACK);
FontblueFont=PdfUtil.createFont(10,Font.NORMAL,BaseColor.BLUE);
FontbigFont=PdfUtil.createFont(14,Font.NORMAL,BaseColor.BLACK);
FontlittleFont=PdfUtil.createFont(10,Font.NORMAL,BaseColor.BLACK);
Paragraphtitle=PdfUtil.createParagraph("测试pdf",bigFont);
title.setAlignment(Element.ALIGN_CENTER);
//4.添加段落内容
document.add(title);
//5.close()
document.close();
os.close();
returnnewResponse().setContent("success");
}
}
运行结果
下载页面:
下载的文件效果:
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。