不少項目都須要將系統中的數據生成經常使用的辦公軟件中,例如:world,excel,pdf等。這其中最經常使用的就是開源項目Apache POI和操做PDF的IText。其中IText的html、css解析度不夠,因而有人作了一個flying-seucar對Itext進行了增強。css
a)MAVA下載
html
<dependency> <groupId>org.xhtmlrenderer</groupId> <artifactId>flying-saucer-core</artifactId> <version>9.0.8</version> </dependency> <dependency> <groupId>org.xhtmlrenderer</groupId> <artifactId>flying-saucer-pdf-itext5</artifactId> <version>9.0.8</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.8</version> </dependency>
b)相關依賴
java
org.xhtmlrenderer.pdf.ITextRenderer:主要渲染類。spring
org.xhtmlrenderer.pdf.PDFEncryption:密碼服務器
org.xhtmlrenderer.pdf.ITextFontResolver:字體app
//在使用中:格式要求很嚴格。 private final static String CONTENTFILE = "D:\\project\\test\\111.txt";// 元數數據 private final static String PDFOUT = "D:\\project\\test\\my.pdf";// PDF輸出 private final static String TTLPATH = "D:\\project\\test\\simsun.ttc";// 字體文件 @Test public void TestPdfOne() throws Exception { // 生成渲染器 ITextRenderer renderer = new ITextRenderer(); // 字體 ITextFontResolver font = renderer.getFontResolver(); /** * @see 字體的相關設�?<字體這塊不熟、你們仍是本身多測試�?> * @see path 字體文件路徑 * @see encoding 編碼 * @see embeded :內前 */ font.addFont(TTLPATH, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); // 加載內容 renderer.setDocumentFromString("你好我是命令");// string //renderer.setDocument(new File(CONTENTFILE));//文件 //renderer.setDocument("http://www.baidu.com");// URL // 版本 renderer.setPDFVersion('1'); // 加密 renderer.setPDFEncryption(TestPdf.getPdfEncryption()); // 存儲 renderer.createPDF(new FileOutputStream(PDFOUT)); } /** * @see 加密 * @return */ public static PDFEncryption getPdfEncryption() { /** * 操做級別 * PdfWriter.ALLOW_PRINTING :打印 * PdfWriter.ALLOW_COPY :複製 * PdfWriter.ALLOW_FILL_IN :全部 */ /** * 加密類型: * STANDARD_ENCRYPTION_40 = 0; * STANDARD_ENCRYPTION_128 = 1; */ return new PDFEncryption("1231".getBytes(), "1231".getBytes(), PdfWriter.ALLOW_PRINTING, 1); }
//1.這裏和springMVC的結合 //2.這種方法不會在服務器生成PDF文件 //3.利用頁面生成的PDF,最接近平時所用的PDF排版 @RequestMapping(value = "/user/downprotocal/{investId}") public void downProtocal(HttpServletRequest request, HttpServletResponse response, @PathVariable int investId) { try { Bid bid = this.bidService.getBidByInvestId(investId); if (null != bid) { // 中文需轉義 response.setHeader("Content-disposition", "attachment;filename=" + bid.getSerialNumber() + ".pdf"); response.setContentType("application/pdf"); OutputStream os = response.getOutputStream(); ITextRenderer renderer = new ITextRenderer(); // 指定模板地址 System.out.println(MyUriUtil.getUri(request) + "user/getpdf/" + investId); //服務器PDF頁面的鏈接 renderer.setDocument(MyUriUtil.getUri(request) + "pdftemp/" + investId); ITextFontResolver fontResolver = renderer.getFontResolver(); // 字體 fontResolver.addFont( request.getServletContext().getRealPath("/") + "WEB-INF\\fonts\\simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); renderer.layout(); renderer.createPDF(os); os.close(); // fontResolver.addFont("C:/Windows/Fonts/simhei.ttf", // BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); // fontResolver.addFont("C:/Windows/Fonts/simkai.ttf", // BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); } else { response.sendRedirect(request.getContextPath() + "/user/loadprotocal"); } } catch (IOException | DocumentException e) { LOGGER.error(MyTimeUtil.getYYMMDDTimeString() + "[PDF錯誤]", e); } } //pdf頁面 @RequestMapping(value = "/pdftemp/{investId}") public String pdfTemp(HttpServletRequest request, @PathVariable int investId) { try { /** * 數據處理的文件 */ } catch (Exception e) { LOGGER.error("[協議加載]", e); } return "pdf/protocal"; }