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(同步異常)