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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。