您好,登錄后才能下訂單哦!
本篇內容主要講解“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); /* List<CurCitesSpeListVo> list = 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”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。