本篇內(nèi)容主要講解“itextpdf怎么生成PDF”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“itextpdf怎么生成PDF”吧!
創(chuàng)新互聯(lián)是一家專業(yè)提供薛城企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站制作、成都做網(wǎng)站、H5頁(yè)面制作、小程序制作等業(yè)務(wù)。10年已為薛城眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。
生成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("林護(hù)許準(zhǔn)云【2019】0100007號(hào)", 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);//頁(yè)碼上的紅頭標(biāo)題 URL endUrl = getURLTemplate(SUPERVISE_END_IMG);//每頁(yè)上的尾部紅線 //拿到字庫(kù) String FONT_PATH="E:/Git/busi/cites/sw-citesapprove-parent/citesapprove-server/src/main/webapp/static/fonts/"; //這個(gè)是仿宋體的路勁 測(cè)試的時(shí)候這個(gè)指向本地也行 String FONTHEI_PATH="E:/Git/busi/cites/sw-citesapprove-parent/citesapprove-server/src/main/webapp/static/fonts/";//這個(gè)是黑體的路勁 測(cè)試的時(shí)候這個(gè)指向本地也行 //單元測(cè)試文件 //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); //黑體 文件標(biāo)題用黑體 BaseFont baseFontHei = BaseFont.createFont(FONTHEI_PATH, "Identity-H", BaseFont.EMBEDDED); //創(chuàng)建文本 //構(gòu)造函數(shù) 選擇對(duì)應(yīng)的紙張型號(hào),以及左右上下的邊距 Document document = new Document(PageSize.A4, 35, 35, 110, 60); //PDF文件對(duì)應(yīng)的位置可以是指定位置的,也可以是輸出流,輸出流可以寫到硬盤上 PdfWriter pdfWriter = PdfWriter.getInstance(document, output); pdfWriter.setPageEvent(new BackGroundImage(headUrl,endUrl)); SimpleDateFormat sdf = new SimpleDateFormat("yyyy年M月d日"); try { //打開文本 document.open(); //根據(jù)圖片得到文件頭 /*Image img1 = Image.getInstance(headUrl); img1.setAbsolutePosition(0, 750);//設(shè)置圖片位置 img1.scaleAbsolute(600, 150);//設(shè)置圖片大小 document.add(img1);//把圖片添加到PDF文檔 //得到尾部圖片 Image img2 = Image.getInstance(endUrl); img2.setAbsolutePosition(0, 20);//設(shè)置圖片位置 img2.scaleAbsolute(600, 50);//設(shè)置圖片所占大小 document.add(img2);//添加到PDF上 */ //文件號(hào) //Paragraph fileNumberParagraph = new Paragraph(70); //這是段落 傳入的值是距離上一段的位置,沒有上一段則是距離邊框的位置 //fileNumberParagraph.setAlignment(2);//設(shè)置對(duì)齊方式 對(duì)齊方式有三種 分別是 1 2 3 中右左 //Font font = new Font(baseFont);//得到對(duì)應(yīng)的字 //font.setSize(16);//設(shè)置字體大小 //fileNumberParagraph.setFont(font); //設(shè)置字體 //Chunk chunk = new Chunk(); //塊,文字區(qū)域,表示一個(gè)區(qū)域,也能放圖片 //fileNumberParagraph.add(chunk); //把文字區(qū)域放入段落 //document.add(fileNumberParagraph);//把段落放入文檔 /* CurCitesApprovalHeadVo tempVo=new CurCitesApprovalHeadVo(); ReflectionUtils.updateBeanData(headBo, tempVo); ParaMappingConfig[] configs = new ParaMappingConfig[]{ // 境外國(guó)家地區(qū) new ParaMappingConfig(ParaMappingConfig.sw_app, "iEType", CitesSwPara.CITES_I_E_TYPE.getUserNm(),CitesSwPara.CITES_I_E_TYPE.getParaTypeCd()),// 進(jìn)出口類型 }; paraServiceUtil.setParaNameVal2Vo(tempVo, configs, "Text");*/ Paragraph title = getParagraph(approvNo, baseFontHei,1,0,22,0,0); document.add(title); //第一段 StringBuilder noticeText=new StringBuilder(); noticeText.append("關(guān)于同意"); noticeText.append("tempVo.getCopName()"); noticeText.append("tempVo.getiETypeText()"); noticeText.append("野生動(dòng)植物及其制品的行政許可決定你(單位)的申請(qǐng)材料("); noticeText.append("tempVo.getApplyNo()"); noticeText.append(")收悉。經(jīng)審核,同意你(單位)"); noticeText.append("tempVo.getiETypeText()"); noticeText.append("的申請(qǐng),詳見附表"); Paragraph noticeOne = getParagraph(noticeText.toString(), baseFont, 3, 20,16,33,24); document.add(noticeOne); /*************************************************************************************/ //畫擺表格 PdfPTable table = new PdfPTable(7); //傳入的參數(shù)表示有幾列 table.setTotalWidth(520); float[] columnWidth={40,100,100,60,60,100,60};//沒列的大小 table.setTotalWidth(columnWidth); table.setLockedWidth(true); //標(biāo)題與表格中間的距離 Paragraph p = new Paragraph(); Font f = new Font(baseFont);//字體 f.setSize(18);//字體大小 p.setFont(f);//設(shè)置段落字體 Chunk c = new Chunk(" "); p.add(c); document.add(p); //表格開始 每一個(gè)cell 對(duì)應(yīng)一列,不滿六列不打印,這個(gè)幾列是自己設(shè)置的 表格每一行必須有列, PdfPCell cell = getPdfPCell("序號(hào)",baseFontHei,14,1);//表格第一個(gè)標(biāo)題 cell.setFixedHeight(40);//設(shè)置表格單元格高度 table.addCell(cell); //表格第2個(gè)標(biāo)題 cell = getPdfPCell("物種名稱(中文名)",baseFontHei,14,1); cell.setFixedHeight(40);//設(shè)置表格單元格高度 table.addCell(cell); //表格第3個(gè)標(biāo)題 cell = getPdfPCellCenter("物種名稱(拉丁學(xué)名)",baseFontHei); cell.setFixedHeight(40);//設(shè)置表格單元格高度 table.addCell(cell); //表格第4個(gè)標(biāo)題 cell = getPdfPCellCenter("數(shù)量",baseFontHei); cell.setFixedHeight(40);//設(shè)置表格單元格高度 table.addCell(cell); //表格第5個(gè)標(biāo)題 cell = getPdfPCellCenter("單位",baseFontHei); cell.setFixedHeight(40);//設(shè)置表格單元格高度 table.addCell(cell); //表格第5個(gè)標(biāo)題 cell = getPdfPCellCenter("標(biāo)本類型",baseFontHei); cell.setFixedHeight(40);//設(shè)置表格單元格高度 table.addCell(cell); //表格第6個(gè)標(biāo)題 cell = getPdfPCellCenter("境外國(guó)家/地區(qū)",baseFontHei); cell.setFixedHeight(40);//設(shè)置表格單元格高度 table.addCell(cell); /* List<CurCitesSpeListVo> list = citesApprovalVoDao.queryCurCitesSpeListVoByApplyNo(headBo.getApplyNo()); ParaMappingConfig[] listLonfigs = new ParaMappingConfig[]{ // 境外國(guó)家地區(qū) new ParaMappingConfig(ParaMappingConfig.sw_dep, "abrCounName", "CITES_PARA_COUNTRY") }; paraServiceUtil.setParaNameVal2Vo(list, listLonfigs, "Text"); //序號(hào) 物種名稱(中文名) 物種名稱(拉丁學(xué)名) 數(shù)量 單位 標(biāo)本類型 境外國(guó)家/地區(qū) int num=1; //開始編列細(xì)項(xiàng) for (CurCitesSpeListVo vo : list) { table.addCell(getPdfPCell(num+"",baseFont,12,1)); //這個(gè)是第幾個(gè)物種 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)); //這個(gè)是第幾個(gè)物種 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("是否需要申請(qǐng)標(biāo)識(shí)?"); noticeTwoText.append("請(qǐng)你(單位)于"); noticeTwoText.append("sdf.format(tempVo.getValidDate())"); noticeTwoText.append("前向國(guó)家瀕危物種進(jìn)出口管理機(jī)構(gòu)辦理《允許進(jìn)出口證明書》,逾期無效。"); //第二段 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("抄送:國(guó)家瀕管辦、"); noticeThreeText.append(tempVo.getCcDepName()); noticeThreeText.append("\n"); noticeThreeText.append("本局發(fā)送:局行政許可辦公室"); noticeThreeText.append("國(guó)家林業(yè)和草原局 "); noticeThreeText.append(sdf.format(sendDte)); noticeThreeText.append("印發(fā)"); }else{ noticeThreeText.append("抄送:國(guó)家林業(yè)和草原局野生動(dòng)植物保護(hù)司、國(guó)家瀕管辦、"); noticeThreeText.append(tempVo.getCcDepName()); noticeThreeText.append("\n"); noticeThreeText.append(headBo.getDepName()); noticeThreeText.append(sdf.format(sendDte)); noticeThreeText.append("印發(fā)"); }*/ noticeThreeText.append("抄送:國(guó)家林業(yè)和草原局野生動(dòng)植物保護(hù)司、國(guó)家瀕管辦、"); noticeThreeText.append("tempVo.getCcDepName()"); noticeThreeText.append("\n"); noticeThreeText.append("headBo.getDepName()"); noticeThreeText.append(sdf.format(sendDte)); noticeThreeText.append("印發(fā)"); Paragraph noticeThree = getParagraph(noticeThreeText.toString(), baseFont, 3, 20,16,33,24); document.add(noticeThree); PdfPageEventHelper aa=new PdfPageEventHelper(); //關(guān)閉文本 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獲取當(dāng)前系統(tǒng)操作類型 if (SEnv.WINDOWS) { url = new URL("file", null, path);// String轉(zhuǎn)化成URL } else if (SEnv.LINUX || SEnv.SUN_OS) { url = new URL("file", null, "/" + path);// String轉(zhuǎn)化成URL } } catch (Exception e) { } return url; } private static PdfPCell getPdfPCellCenter(String cellText,BaseFont baseFont) throws Exception{ //為null會(huì)報(bào)錯(cuò) 防止報(bào)錯(cuò) if(cellText==null){ cellText=" "; } //表格開始 Paragraph paragraph = new Paragraph();//為了讓起居中 paragraph.setAlignment(1); //對(duì)齊方式 Font font = new Font(baseFont);//字體 font.setSize(14);//字體大小 paragraph.setFont(font);//設(shè)置段落字體 Chunk chunk = new Chunk(cellText); paragraph.add(chunk); PdfPCell cell = new PdfPCell(); cell.setMinimumHeight(25);//設(shè)置單元格最小高度,會(huì)隨著數(shù)據(jù)增多而增多 cell.addElement(paragraph); return cell; } /** * * @param chunkText 段落文本 * @param baseFont 字體 * @param alignment //設(shè)置對(duì)齊方式 對(duì)齊方式有三種 分別是 1 2 3 中右左 * @param leading //是距離上一段的位置,沒有上一段則是距離邊框的位置 * @param fontSize //字體大小 * @param firstLineIndent //首行縮進(jìn) * @param fixedLeading //行間距 * @return */ private static Paragraph getParagraph(String chunkText,BaseFont baseFont,int alignment,int leading,int fontSize,int firstLineIndent, int fixedLeading ) { //為null會(huì)報(bào)錯(cuò) 防止報(bào)錯(cuò) if(chunkText==null){ chunkText=" "; } //標(biāo)題 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會(huì)報(bào)錯(cuò) 防止報(bào)錯(cuò) if(cellText==null){ cellText=" "; } //表格開始 Paragraph paragraph = new Paragraph(); paragraph.setAlignment(alignment); //對(duì)齊方式 Font font = new Font(baseFont);//字體 font.setSize(size);//字體大小 paragraph.setFont(font);//設(shè)置段落字體 Chunk chunk = new Chunk(cellText); paragraph.add(chunk); PdfPCell cell = new PdfPCell(); cell.setMinimumHeight(25);//設(shè)置單元格最小高度,會(huì)隨著數(shù)據(jù)增多而增多 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);//頁(yè)碼上的紅頭標(biāo)題 URL endUrl = getURLTemplate(SUPERVISE_END_IMG);//每頁(yè)上的尾部紅線 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);//設(shè)置圖片位置 img1.scaleAbsolute(600, 150);//設(shè)置圖片大小 copyEnd.add(img1);//把圖片添加到PDF文檔 //得到尾部圖片 Image img2 = Image.getInstance(endUrl); img2.setAbsolutePosition(0, 20);//設(shè)置圖片位置 img2.scaleAbsolute(600, 50);//設(shè)置圖片所占大小 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(); } }
加載背景 每頁(yè)都加上同一個(gè)圖片
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: 為每一頁(yè)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);//設(shè)置圖片位置 img1.scaleAbsolute(600, 150);//設(shè)置圖片大小 document.add(img1);//把圖片添加到PDF文檔 //得到尾部圖片 Image img2 = Image.getInstance(endUrl); img2.setAbsolutePosition(0, 20);//設(shè)置圖片位置 img2.scaleAbsolute(600, 50);//設(shè)置圖片所占大小 document.add(img2); } catch (BadElementException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (DocumentException e) { e.printStackTrace(); } super.onStartPage(pdfWriter, document); } }
到此,相信大家對(duì)“itextpdf怎么生成PDF”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
分享標(biāo)題:itextpdf怎么生成PDF
鏈接URL:http://www.rwnh.cn/article14/jiecge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)公司、營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站排名、網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)