itextpdf怎么生成PDF
发表于:2024-11-24 作者:千家信息网编辑
千家信息网最后更新 2024年11月24日,本篇内容主要讲解"itextpdf怎么生成PDF",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"itextpdf怎么生成PDF"吧!生成PDFpackage
千家信息网最后更新 2024年11月24日itextpdf怎么生成PDF
本篇内容主要讲解"itextpdf怎么生成PDF",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"itextpdf怎么生成PDF"吧!
生成PDF
package com.sw.busi.license.cites.approve.spi.service.impl.approval;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.net.URL;import java.text.SimpleDateFormat;import java.util.Date;import com.itextpdf.text.Chunk;import com.itextpdf.text.Document;import com.itextpdf.text.DocumentException;import com.itextpdf.text.Font;import com.itextpdf.text.Image;import com.itextpdf.text.PageSize;import com.itextpdf.text.Paragraph;import com.itextpdf.text.pdf.BaseFont;import com.itextpdf.text.pdf.PdfCopy;import com.itextpdf.text.pdf.PdfImportedPage;import com.itextpdf.text.pdf.PdfPCell;import com.itextpdf.text.pdf.PdfPTable;import com.itextpdf.text.pdf.PdfPageEventHelper;import com.itextpdf.text.pdf.PdfReader;import com.itextpdf.text.pdf.PdfWriter;import com.sw.busi.common.log.Logger;import com.sw.busi.common.utils.SEnv;public class test { private static final String HEAD_IMG = "head.jpg"; private static final String SUPERVISE_END_IMG = "supervise_end.jpg"; private static final String FONT = "static/fonts/simfang.ttf"; private static final String FONTHEI = "static/fonts/simhei.ttf";public static void main(String[] args) { try { byte[] byteDate = createCurCitesApprovalPDF("林护许准云【2019】0100007号", new Date()); byteDate=createHeanAndEndRedFile(byteDate); writeFile("C:/xuexi/", "1.pdf", byteDate); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }public static byte[] createCurCitesApprovalPDF(String approvNo,Date sendDte) throws Exception{ ByteArrayOutputStream output = new ByteArrayOutputStream(); URL headUrl = getURLTemplate(HEAD_IMG);//页码上的红头标题 URL endUrl = getURLTemplate(SUPERVISE_END_IMG);//每页上的尾部红线 //拿到字库 String FONT_PATH="E:/Git/busi/cites/sw-citesapprove-parent/citesapprove-server/src/main/webapp/static/fonts/"; //这个是仿宋体的路劲 测试的时候这个指向本地也行 String FONTHEI_PATH="E:/Git/busi/cites/sw-citesapprove-parent/citesapprove-server/src/main/webapp/static/fonts/";//这个是黑体的路劲 测试的时候这个指向本地也行 //单元测试文件 //path = path.substring(1,path.length());// 从路径字符串中取出工程路劲 FONT_PATH=FONT_PATH+"simfang.ttf"; FONTHEI_PATH=FONTHEI_PATH+"simhei.ttf"; //仿宋体 BaseFont baseFont = BaseFont.createFont(FONT_PATH, "Identity-H", BaseFont.EMBEDDED); //黑体 文件标题用黑体 BaseFont baseFontHei = BaseFont.createFont(FONTHEI_PATH, "Identity-H", BaseFont.EMBEDDED); //创建文本 //构造函数 选择对应的纸张型号,以及左右上下的边距 Document document = new Document(PageSize.A4, 35, 35, 110, 60); //PDF文件对应的位置可以是指定位置的,也可以是输出流,输出流可以写到硬盘上 PdfWriter pdfWriter = PdfWriter.getInstance(document, output); pdfWriter.setPageEvent(new BackGroundImage(headUrl,endUrl)); SimpleDateFormat sdf = new SimpleDateFormat("yyyy年M月d日"); try { //打开文本 document.open(); //根据图片得到文件头 /*Image img1 = Image.getInstance(headUrl); img1.setAbsolutePosition(0, 750);//设置图片位置 img1.scaleAbsolute(600, 150);//设置图片大小 document.add(img1);//把图片添加到PDF文档 //得到尾部图片 Image img2 = Image.getInstance(endUrl); img2.setAbsolutePosition(0, 20);//设置图片位置 img2.scaleAbsolute(600, 50);//设置图片所占大小 document.add(img2);//添加到PDF上*/ //文件号 //Paragraph fileNumberParagraph = new Paragraph(70); //这是段落 传入的值是距离上一段的位置,没有上一段则是距离边框的位置 //fileNumberParagraph.setAlignment(2);//设置对齐方式 对齐方式有三种 分别是 1 2 3 中右左 //Font font = new Font(baseFont);//得到对应的字 //font.setSize(16);//设置字体大小 //fileNumberParagraph.setFont(font); //设置字体 //Chunk chunk = new Chunk(); //块,文字区域,表示一个区域,也能放图片 //fileNumberParagraph.add(chunk); //把文字区域放入段落 //document.add(fileNumberParagraph);//把段落放入文档 /* CurCitesApprovalHeadVo tempVo=new CurCitesApprovalHeadVo(); ReflectionUtils.updateBeanData(headBo, tempVo); ParaMappingConfig[] configs = new ParaMappingConfig[]{ // 境外国家地区 new ParaMappingConfig(ParaMappingConfig.sw_app, "iEType", CitesSwPara.CITES_I_E_TYPE.getUserNm(),CitesSwPara.CITES_I_E_TYPE.getParaTypeCd()),// 进出口类型 }; paraServiceUtil.setParaNameVal2Vo(tempVo, configs, "Text");*/ Paragraph title = getParagraph(approvNo, baseFontHei,1,0,22,0,0); document.add(title); //第一段 StringBuilder noticeText=new StringBuilder(); noticeText.append("关于同意"); noticeText.append("tempVo.getCopName()"); noticeText.append("tempVo.getiETypeText()"); noticeText.append("野生动植物及其制品的行政许可决定你(单位)的申请材料("); noticeText.append("tempVo.getApplyNo()"); noticeText.append(")收悉。经审核,同意你(单位)"); noticeText.append("tempVo.getiETypeText()"); noticeText.append("的申请,详见附表"); Paragraph noticeOne = getParagraph(noticeText.toString(), baseFont, 3, 20,16,33,24); document.add(noticeOne); /*************************************************************************************/ //画摆表格 PdfPTable table = new PdfPTable(7); //传入的参数表示有几列 table.setTotalWidth(520); float[] columnWidth={40,100,100,60,60,100,60};//没列的大小 table.setTotalWidth(columnWidth); table.setLockedWidth(true); //标题与表格中间的距离 Paragraph p = new Paragraph(); Font f = new Font(baseFont);//字体 f.setSize(18);//字体大小 p.setFont(f);//设置段落字体 Chunk c = new Chunk(" "); p.add(c); document.add(p); //表格开始 每一个cell 对应一列,不满六列不打印,这个几列是自己设置的 表格每一行必须有列, PdfPCell cell = getPdfPCell("序号",baseFontHei,14,1);//表格第一个标题 cell.setFixedHeight(40);//设置表格单元格高度 table.addCell(cell); //表格第2个标题 cell = getPdfPCell("物种名称(中文名)",baseFontHei,14,1); cell.setFixedHeight(40);//设置表格单元格高度 table.addCell(cell); //表格第3个标题 cell = getPdfPCellCenter("物种名称(拉丁学名)",baseFontHei); cell.setFixedHeight(40);//设置表格单元格高度 table.addCell(cell); //表格第4个标题 cell = getPdfPCellCenter("数量",baseFontHei); cell.setFixedHeight(40);//设置表格单元格高度 table.addCell(cell); //表格第5个标题 cell = getPdfPCellCenter("单位",baseFontHei); cell.setFixedHeight(40);//设置表格单元格高度 table.addCell(cell); //表格第5个标题 cell = getPdfPCellCenter("标本类型",baseFontHei); cell.setFixedHeight(40);//设置表格单元格高度 table.addCell(cell); //表格第6个标题 cell = getPdfPCellCenter("境外国家/地区",baseFontHei); cell.setFixedHeight(40);//设置表格单元格高度 table.addCell(cell); /* Listlist = citesApprovalVoDao.queryCurCitesSpeListVoByApplyNo(headBo.getApplyNo()); ParaMappingConfig[] listLonfigs = new ParaMappingConfig[]{ // 境外国家地区 new ParaMappingConfig(ParaMappingConfig.sw_dep, "abrCounName", "CITES_PARA_COUNTRY") }; paraServiceUtil.setParaNameVal2Vo(list, listLonfigs, "Text"); //序号 物种名称(中文名) 物种名称(拉丁学名) 数量 单位 标本类型 境外国家/地区 int num=1; //开始编列细项 for (CurCitesSpeListVo vo : list) { table.addCell(getPdfPCell(num+"",baseFont,12,1)); //这个是第几个物种 table.addCell(getPdfPCell(vo.getSpeName(),baseFont,12,1)); // table.addCell(getPdfPCell(vo.getSpeEname(),baseFont,12,1)); // table.addCell(getPdfPCell(vo.getQty().toString(),baseFont,12,3));// table.addCell(getPdfPCell(vo.getUnit(),baseFont,12,1));// table.addCell(getPdfPCell(vo.getMarkType(),baseFont,12,1));// table.addCell(getPdfPCell(vo.getAbrCounNameText(),baseFont,12,1));// num++; }*/ for (int i = 1; i <65; i++) { table.addCell(getPdfPCell(i+"",baseFont,12,1)); //这个是第几个物种 table.addCell(getPdfPCell("2",baseFont,12,1)); // table.addCell(getPdfPCell("3",baseFont,12,1)); // table.addCell(getPdfPCell("4",baseFont,12,3));// table.addCell(getPdfPCell("5",baseFont,12,1));// table.addCell(getPdfPCell("6",baseFont,12,1));// table.addCell(getPdfPCell("7",baseFont,12,1));// } document.add(table); /*************************************************************************************/ StringBuilder noticeTwoText=new StringBuilder(); noticeTwoText.append("是否需要申请标识?"); noticeTwoText.append("请你(单位)于"); noticeTwoText.append("sdf.format(tempVo.getValidDate())"); noticeTwoText.append("前向国家濒危物种进出口管理机构办理《允许进出口证明书》,逾期无效。"); //第二段 Paragraph noticeTwo = getParagraph(noticeTwoText.toString(), baseFont, 3, 20,16,33,24); document.add(noticeTwo); StringBuilder noticeThreeText=new StringBuilder(); /*if("01".equals(tempVo.getDep())){ noticeThreeText.append("抄送:国家濒管办、"); noticeThreeText.append(tempVo.getCcDepName()); noticeThreeText.append("\n"); noticeThreeText.append("本局发送:局行政许可办公室"); noticeThreeText.append("国家林业和草原局 "); noticeThreeText.append(sdf.format(sendDte)); noticeThreeText.append("印发"); }else{ noticeThreeText.append("抄送:国家林业和草原局野生动植物保护司、国家濒管办、"); noticeThreeText.append(tempVo.getCcDepName()); noticeThreeText.append("\n"); noticeThreeText.append(headBo.getDepName()); noticeThreeText.append(sdf.format(sendDte)); noticeThreeText.append("印发"); }*/ noticeThreeText.append("抄送:国家林业和草原局野生动植物保护司、国家濒管办、"); noticeThreeText.append("tempVo.getCcDepName()"); noticeThreeText.append("\n"); noticeThreeText.append("headBo.getDepName()"); noticeThreeText.append(sdf.format(sendDte)); noticeThreeText.append("印发"); Paragraph noticeThree = getParagraph(noticeThreeText.toString(), baseFont, 3, 20,16,33,24); document.add(noticeThree); PdfPageEventHelper aa=new PdfPageEventHelper(); //关闭文本 document.close(); } catch (DocumentException e) { } catch (FileNotFoundException e) { } return output.toByteArray();}public static URL getURLTemplate(String urlAdress) { URL url = null; String path = "E:/Git/busi/cites/sw-citesapprove-parent/sw-citesapprove-front/src/main/webapp/static/pdfjs/template/";// 得到d:/tomcat/webapps/工程名WEB-INF/classes/路径 path=path+urlAdress; try { // SEnv.WINDOWS获取当前系统操作类型 if (SEnv.WINDOWS) { url = new URL("file", null, path);// String转化成URL } else if (SEnv.LINUX || SEnv.SUN_OS) { url = new URL("file", null, "/" + path);// String转化成URL } } catch (Exception e) { } return url;}private static PdfPCell getPdfPCellCenter(String cellText,BaseFont baseFont) throws Exception{ //为null会报错 防止报错 if(cellText==null){ cellText=" "; } //表格开始 Paragraph paragraph = new Paragraph();//为了让起居中 paragraph.setAlignment(1); //对齐方式 Font font = new Font(baseFont);//字体 font.setSize(14);//字体大小 paragraph.setFont(font);//设置段落字体 Chunk chunk = new Chunk(cellText); paragraph.add(chunk); PdfPCell cell = new PdfPCell(); cell.setMinimumHeight(25);//设置单元格最小高度,会随着数据增多而增多 cell.addElement(paragraph); return cell;}/** * * @param chunkText 段落文本 * @param baseFont 字体 * @param alignment //设置对齐方式 对齐方式有三种 分别是 1 2 3 中右左 * @param leading //是距离上一段的位置,没有上一段则是距离边框的位置 * @param fontSize //字体大小 * @param firstLineIndent //首行缩进 * @param fixedLeading //行间距 * @return */private static Paragraph getParagraph(String chunkText,BaseFont baseFont,int alignment,int leading,int fontSize,int firstLineIndent, int fixedLeading ) { //为null会报错 防止报错 if(chunkText==null){ chunkText=" "; } //标题 Paragraph paragraph = new Paragraph(leading); Font titlefont = new Font(baseFont); titlefont.setSize(fontSize); paragraph.setFirstLineIndent(33); paragraph.setFont(titlefont); paragraph.setAlignment(alignment); paragraph.setLeading(fixedLeading); Chunk titleChunk = new Chunk(chunkText); paragraph.add(titleChunk); return paragraph; }private static PdfPCell getPdfPCell(String cellText,BaseFont baseFont,float size,int alignment) throws Exception{ //为null会报错 防止报错 if(cellText==null){ cellText=" "; } //表格开始 Paragraph paragraph = new Paragraph(); paragraph.setAlignment(alignment); //对齐方式 Font font = new Font(baseFont);//字体 font.setSize(size);//字体大小 paragraph.setFont(font);//设置段落字体 Chunk chunk = new Chunk(cellText); paragraph.add(chunk); PdfPCell cell = new PdfPCell(); cell.setMinimumHeight(25);//设置单元格最小高度,会随着数据增多而增多 cell.addElement(paragraph); return cell;}public static void writeFile(String path, String fileName, byte[] content) throws IOException { try { File f = new File(path); if (!f.exists()) { f.mkdirs(); } FileOutputStream fos = new FileOutputStream(path + fileName); fos.write(content); fos.close(); } catch (IOException e) { throw new RuntimeException(e); }}public static byte[] createHeanAndEndRedFile(byte[] byteDate){ URL headUrl = getURLTemplate(HEAD_IMG);//页码上的红头标题 URL endUrl = getURLTemplate(SUPERVISE_END_IMG);//每页上的尾部红线 ByteArrayOutputStream outputEnd = new ByteArrayOutputStream(); Document documentEnd = null; PdfCopy copyEnd = null; try { PdfReader reader = new PdfReader(byteDate); int n = reader.getNumberOfPages(); documentEnd = new Document(reader.getPageSize(1)); copyEnd = new PdfCopy(documentEnd, outputEnd); documentEnd.open(); for (int i = 1; i <= n; i++) { documentEnd.newPage(); Image img1 = Image.getInstance(headUrl); img1.setAbsolutePosition(0, 750);//设置图片位置 img1.scaleAbsolute(600, 150);//设置图片大小 copyEnd.add(img1);//把图片添加到PDF文档 //得到尾部图片 Image img2 = Image.getInstance(endUrl); img2.setAbsolutePosition(0, 20);//设置图片位置 img2.scaleAbsolute(600, 50);//设置图片所占大小 copyEnd.add(img2);//添加到PDF上 PdfImportedPage pageEnd = copyEnd.getImportedPage(reader, i); copyEnd.addPage(pageEnd); } documentEnd.close(); } catch (IOException e) { Logger.error("split pdf file error:{}",e.getMessage(),e); } catch(DocumentException e) { Logger.error("split pdf file error:{}",e.getMessage(),e); } return outputEnd.toByteArray();}}
加载背景 每页都加上同一个图片
package com.sw.busi.license.cites.approve.spi.service.impl.approval;import java.io.IOException;import java.net.URL;import com.itextpdf.text.BadElementException;import com.itextpdf.text.Document;import com.itextpdf.text.DocumentException;import com.itextpdf.text.Image;import com.itextpdf.text.pdf.PdfPageEventHelper;import com.itextpdf.text.pdf.PdfWriter;/** * @Description: 为每一页pdf都生成背景图片 * @author: kylin * @create: 2018-01-08 18:00 **/ public class BackGroundImage extends PdfPageEventHelper { URL headUrl =null; URL endUrl =null; public URL getHeadUrl() { return headUrl; } public void setHeadUrl(URL headUrl) { this.headUrl = headUrl; } public URL getEndUrl() { return endUrl; } public void setEndUrl(URL endUrl) { this.endUrl = endUrl; } public BackGroundImage(){ } public BackGroundImage(URL headUrl,URL endUrl){ this.headUrl = headUrl; this.endUrl = endUrl; } @Override public void onStartPage(PdfWriter pdfWriter, Document document) { try { Image img1 = Image.getInstance(headUrl); img1.setAbsolutePosition(0, 750);//设置图片位置 img1.scaleAbsolute(600, 150);//设置图片大小 document.add(img1);//把图片添加到PDF文档 //得到尾部图片 Image img2 = Image.getInstance(endUrl); img2.setAbsolutePosition(0, 20);//设置图片位置 img2.scaleAbsolute(600, 50);//设置图片所占大小 document.add(img2); } catch (BadElementException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (DocumentException e) { e.printStackTrace(); } super.onStartPage(pdfWriter, document); } }
到此,相信大家对"itextpdf怎么生成PDF"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
图片
表格
字体
位置
大小
标题
国家
单元
高度
段落
物种
方式
生成
单位
尾部
文件
名称
地区
文本
文档
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
客户机服务器计算被广泛应用于集中式处理
软件开发常用的软件环境
软件开发属于什么行业
服务器网盘权限管理
北京网络技术优势
网络安全实验软件
浅谈多媒体软件开发流程
高性能服务器功能
龙口直播软件开发
河南高乐升网络技术有限公司
国际版服务器加mod
宜章学电脑软件开发学费
宝马数据库
数据库查询条件很慢怎么优化
网络安全人才 政策
阿朱软件开发管理博客
软件开发年轻化职业
苹果联通在韩国提示无服务器
泉州回收惠普服务器
怎么从数据库随机数
关于网络技术方面的专业
谷歌服务器连接教程
重仓低价网络安全股
网络技术导论的个人观点
闪电网络技术有限公司
中宏数据库中文期刊论文
怎么设计导航数据库
世界人多的服务器手机版下载
网络技术管理员证书
抖音互联网科技有限公司