1. 程式人生 > >ftl 檔案匯出 pdf 及異常處理辦法

ftl 檔案匯出 pdf 及異常處理辦法

呼叫方法:

<dependency>  
    <groupId>com.lowagie</groupId>  
    <artifactId>itext</artifactId>  
    <version>2.0.8</version>  
</dependency>

<dependency>
    <groupId>org.xhtmlrenderer</groupId>
    <artifactId>core-renderer</artifactId
>
<version>R8</version> </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
@RequestMapping("/creditAgreementPDFDownload")
    @ResponseBody
    public void creditAgreementPDFDownload(HttpServletRequest request, HttpServletResponse response) throws Exception {
        //資料封裝部分
        Map map = new HashMap<String, String>();
        map.put("test"
, "---中國---"); try { ByteArrayOutputStream baos = PDFUtil.createPDF(request, "creditAgreementPDF.ftl", map); System.out.println(baos); //設定response檔案頭 PDFUtil.renderPdf(response, baos.toByteArray(), "123"); } catch (Exception e) { throw
new Exception(e); } } /** * 生成PDF檔案流 * @param request * @param ftlName 檔名稱 * @param root 資料 * @return ByteArrayOutputStream * @throws Exception */ public static ByteArrayOutputStream createPDF(HttpServletRequest request, String ftlName, Object root) throws Exception { String basePath = request.getSession().getServletContext().getRealPath("/");//絕對路徑 Configuration cfg = new Configuration(); try { cfg.setLocale(Locale.CHINA); cfg.setEncoding(Locale.CHINA, "UTF-8"); //設定編碼 cfg.setDefaultEncoding("UTF-8"); //設定模板路徑 cfg.setDirectoryForTemplateLoading(new File(basePath + "/WEB-INF/ftl/")); //獲取模板 Template template = cfg.getTemplate(ftlName); template.setEncoding("UTF-8"); ITextRenderer iTextRenderer = new ITextRenderer(); //設定字型 ITextFontResolver fontResolver = iTextRenderer.getFontResolver(); fontResolver.addFont(basePath + "/WEB-INF/classes/simsun.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); Writer writer = new StringWriter(); //資料填充模板 template.process(root, writer); //設定輸出檔案內容及路徑 String str = writer.toString(); iTextRenderer.setDocumentFromString(str); iTextRenderer.getSharedContext().setBaseURL("file:/D:");//共享路徑file:/home/ddcj/ iTextRenderer.layout(); //生成PDF ByteArrayOutputStream baos = new ByteArrayOutputStream(); iTextRenderer.createPDF(baos); baos.close(); return baos; } catch(Exception e) { throw new Exception(e); } } //此方法主要是設定檔案頭,並把檔案作為附件下載 public static void renderPdf(HttpServletResponse response, final byte[] bytes, final String filename) { setFileDownloadHeader(response, filename, ".pdf"); if (null != bytes) { try { response.getOutputStream().write(bytes); response.getOutputStream().flush(); } catch (IOException e) { throw new IllegalArgumentException(e); } } } /** * 設定讓瀏覽器彈出下載對話方塊的Header. * @param fileName下載後的檔名. */ public static void setFileDownloadHeader(HttpServletResponse response, String fileName, String fileType) { try { // 中文檔名支援 String encodedfileName = new String(fileName.getBytes("GBK"), "ISO8859-1"); response.setHeader("Content-Disposition", "attachment; filename=\"" + encodedfileName + fileType + "\""); } catch (UnsupportedEncodingException e) { } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90

匯出失敗,提示匯出路徑異常; 
替換異常jar

<dependency>
    <groupId>xalan</groupId>
    <artifactId>xalan</artifactId>
    <version>2.7.1</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

先存在的問題:匯出表格列數比較多時,有一部分列顯示不出來;

轉載地址:http://blog.csdn.net/NetSnake_/article/details/77161106

相關推薦

ftl 檔案匯出 pdf 異常處理辦法

呼叫方法: <dependency> <groupId>com.lowagie</groupId> <artifactId>itext</artifactId> <ver

【Java筆記】IO流中檔案複製異常處理

import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class Main

java檔案操作異常處理

Java異常框架Java異常架構圖: 1. Throwable Throwable是 Java 語言中所有錯誤或異常的超類。 Throwable包含兩個子類: Error 和 Except

Python抽象異常處理

訪問 崩潰 span peer test all 機制 出現 import #面向對象:多態、封裝、繼承#1 多態:意味著即使不知道變量所引用的對象類型是什麽,還是能對他進行操作,而且也會根據他的不同類型表現出不同的行為#多態和方法from random import ch

zuul網關Filter處理流程異常處理

println 沒有 actor stat blog 一個地方 cli ram color 本文轉載自:https://blog.csdn.net/tianyaleixiaowu/article/details/77893822 上一篇介紹了java網關Zuul的簡單使用

Spring-Batch學習總結(1)——重要概念,環境搭建,名詞解釋,第一個項目異常處理

img truct 設定 uil sna sta col key services Spring-batch框架學習總結(1)一.初識Spring-batch框架:1.核心名詞解釋:Job:是Spring-batch框架的核心概念,它包含了批處理的所有操作Step:每一個J

SpringMVC響應檢視丶檔案上傳丶異常處理丶攔截器

SpringMVC響應資料和結果檢視 返回值分類 返回字串 Controller方法返回字串可以指定邏輯檢視的名稱,根據檢視解析器為物理檢視的地址。 引數可以寫一個Model來儲存域物件中的值 應用例子: @Controller @Req

python入門19 異常異常處理 異常捕獲

  常見異常舉例 """ 一些異常舉例:""" '''模組不存在 ModuleNotFoundError: No module named 'data' ''' #import data1 '''索引越界 IndexError: list index out of range ''' l

Java異常異常處理

Java異常簡介 Java異常是Java提供的一種識別及響應錯誤的一致性機制。Java異常機制可以使程式中異常處理程式碼和正常業務程式碼分離,保證程式程式碼更加優雅,並提高程式健壯性。按照程式碼的預先設定的異常處理邏輯,針對性地處理異常,讓程式盡最大可能恢復正常並繼續執行,且保持程式碼的清晰。J

13-面向物件異常處理

面向物件及異常處理 內建函式 總結:__init__、__del__、__str__、attr系列、item系列、__call__ __str__與__repr__ 使用print/str方法時會自動觸發__str__方法,當__str__不存在,嘗試__repr__ 使用repr方法時會自動觸發_

ARM的暫存器異常處理機制

arm的暫存器:     普通:r0-r15         r0-r12   //儲存任何資料         r13(sp)  

異常層次結構異常處理(try、catch、finally)

在Java程式語言設計中,所有的異常都是由類來表示,異常物件都是派生於Throwable類的一個例項。下面是Java異常層析結構的一個簡單示意圖: 由圖可知,所有異常類都直接或間接的繼承於Throwable類。 具體分類: Java把所有非正常情況分為Error(錯

【C#】氣泡排序、隱式和顯式轉換、函式異常處理

一、普通氣泡排序: C#中常見的排序方法有:氣泡排序,快速排序,插入排序,選擇排序、堆排序以及歸併排序。雖然還沒學習過,但是也有耳聞,就先把它們先歸類。今天主要講這裡面最常見的氣泡排序。 【概念】 氣泡排序也就是講一組需要排序的數,進行從小到大,或從大到小的排列。計算機

Eclipse中FreeMarker編輯ftl檔案出現標籤警告的解決辦法

在Eclipse下編輯ftl檔案,用HTML編輯器編輯,經常會出現一些標籤警告,可以這麼解決。1、Window->Preferences->Web->Html Files->Validation2、修改下面三個設定,將值設定成Ignore,就可以取消絕

python-檔案I/O與異常處理

open函式 Python內建的open()函式開啟一個檔案,建立一個file物件,相關的輔助方法才可以呼叫它進行讀寫。語法為: file object = open(file_name [, access_mode][, buffering]) 各個引數的細節如下: 1、file_name

Java學習筆記05--強制型別轉換 ;內部類(瞭解即可) ;Java異常體系異常處理;iOS中的try catch 塊

===============java相關講解============= 強制型別轉換: 基本資料型別的轉換 小資料型別---->大的資料型別 自動型別轉換 大資料型別----->小資料型別 強制型別轉換

JavaEE開發之SpringMVC中的自定義攔截器異常處理

上篇部落格我們聊了《》,本篇部落格我們就聊一下自定義攔截器的實現、以及使用ModelAndView物件將Controller的值載入到JSTL上、最後再聊一下異常的捕獲處理。這些在日常開發中都是經常使用的東西。具體請看下方內容。 一、自定義攔截器 顧名思義,攔截器是負責攔截某些東西的工具。本部分我們建立的攔

pyrhon類約束異常處理和日誌模塊

Coding 依賴 div 寫入內容 記錄 添加 文件的 col 發的 類的約束 class Base: #對子類進行了約束,必須重寫該方法 def login(self): print(‘方法錯誤,必須用定義login方法‘)

oracle觸發器例項異常處理

1.寫觸發器的業務需求:     我需要在工單表(up_ask)插入資料或更新資料時通過觸發器(currentnew_ask_trigger)將工單表的資料插入到一箇中間表(nosc_reportnew)中 2.出現的問題:     如果工單表的資料超過了中間表字段資料長度

3. ARMv8 中斷異常處理(包括系統呼叫,系統呼叫即同步異常

ARMv8 64bits相對於之前的 32bits 有較大變動,所有中斷及異常的處理總入口都在entry.S 原始檔中。 1.1.       異常介紹(中斷即稱為 非同步異常) 分為同步和非同步 兩種型別異常,中斷劃入非同步異常型別: Synchronous(同步異常)