❶ 如何把springmvc model 生成pdf文件
本文先敘述,如何操作PDF模板生成PDF文件,再說明在SpringMVC中如何根據PDF模板生成PDF文件。
使用PDF模板生成PDF文件需要以下幾個步驟:
下面按步驟說明:
1. 使用Microsoft Office Word畫好模板
此步驟就不詳述了,就是一個普通的Word文件(template.docx)。給個示例截圖:
2. 使用Adobe Acrobat X Pro將Word文件轉換為帶表單欄位的PDF模板文件
1) 打開Adobe Acrobat X Pro
2) 選擇「創建PDF表單」
3) 選擇源:(PDF、Word、Excel或其它文件類型),下一步
4) 定位Word文件路徑,下一步
5) Adobe Acrobat X Pro會自動猜測表單欄位位置,如圖
6) 一般生成的表單欄位都不符合我們的要求,選中刪除即可。
7) 點擊右鍵選擇文本框,拖動到適當的位置,設置好域名稱,字型大小,字體等。
8) 保存模板文件。(template.pdf)
3. 使用itext操作PDF模板,填充數據,生成PDF文件
1) 需要jar包:itext.jar、itextAsian.jar
2) 核心代碼:
package personal.hutao.test;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
import org.junit.Test;
import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.AcroFields;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfStamper;
public class TestPdf {
@Test
public void test() throws IOException, DocumentException {
String fileName = "D:/template.pdf"; // pdf模板
PdfReader reader = new PdfReader(fileName);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
PdfStamper ps = new PdfStamper(reader, bos);
AcroFields fields = ps.getAcroFields();
fillData(fields, data());
ps.setFormFlattening(true);
ps.close();
OutputStream fos = new FileOutputStream("D:/contract.pdf");
fos.write(bos.toByteArray());
}
public void fillData(AcroFields fields, Map<String, String> data) throws IOException, DocumentException {
for (String key : data.keySet()) {
String value = data.get(key);
fields.setField(key, value);
}
}
public Map<String, String> data() {
Map<String, String> data = new HashMap<String, String>();
data.put("borrower", "胡桃同學");
return data;
}
}
3) 打開contract.pdf,如圖
至此,就實現了根據PDF模板生成PDF文件。
SpringMVC的視圖中已提供了對PDF模板文件的支持:org.springframework.web.servlet.view.document.AbstractPdfStamperView。那麼只需要配置好此視圖就可以了。具體分為以下步驟:
1) 實現抽象類 AbstractPdfStamperView
package personal.hutao.view;
import java.io.IOException;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.view.document.AbstractPdfStamperView;
import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.AcroFields;
import com.lowagie.text.pdf.PdfStamper;
public class PdfStamperView extends AbstractPdfStamperView {
public static final String DATA = "data";
public static final String FILENAME = "mergePdfFileName";
@SuppressWarnings("unchecked")
@Override
protected void mergePdfDocument(Map<String, Object> model,
PdfStamper stamper, HttpServletRequest request,
HttpServletResponse response) throws Exception {
response.setHeader("Content-Disposition", "attachment;filename=" + new String(model.get(FILENAME).toString().getBytes(), "ISO8859-1"));
AcroFields fields = stamper.getAcroFields();
fillData(fields, (Map<String, String>) model.get(DATA));
stamper.setFormFlattening(true);
}
private void fillData(AcroFields fields, Map<String, String> data)
throws IOException, DocumentException {
for (String key : data.keySet()) {
String value = data.get(key);
fields.setField(key, value);
}
}
}
2) 在SpringMVC的配置文件中配置視圖
<!-- 按照BeanName解析視圖 -->
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
<property name="order" value="1" />
</bean>
<!-- 定義Pdf模版視圖 -->
<bean id="contract" class="personal.hutao.view.PdfStamperView">
<property name="url" value="/WEB-INF/template/template.pdf" />
</bean>
3) Controller中的業務邏輯處理
package personal.hutao.controller;
import static personal.hutao.view.PdfStamperView.DATA;
import static personal.hutao.view.PdfStamperView.FILENAME;
import java.util.HashMap;
import java.util.Map;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.coamctech.sample.commons.controller.BaseController;
@RequestMapping("/contract")
@Controller
public class TestController {
@RequestMapping("/export/pdf")
public String (Model model) {
model.addAttribute(DATA, data());
model.addAttribute(FILENAME, "XXX貸款合同");
return "contract";
}
private Map<String, String> data() {
Map<String, String> data = new HashMap<String, String>();
data.put("borrower", "胡桃同學");
return data;
}
}
❷ 寫出MVC的工作原理
1.當用戶在瀏覽器中點擊一個鏈接或者提交一個表單時,那麼就會產生一個請求(request)。當請求離開瀏覽器時,它會攜帶用戶請求的信息。
2.請求的第一站到達的是Spring的DispatcherServlet,它是一個前端控制器,工作是將用戶的請求委託給其他的組件(這里是交給Spring MVC的控制器)去處理。
這里DispatcherServlet要決定將請求傳給哪一個控制器(Controller)去處理,那麼這時就需要處理器映射(Handler Mapping)了。
處理器映射會看請求的URL信息,然後決定將請求交給哪一遲核跡個控制器去處理。比如說有兩個控制器ControllerA和ControllerB,分別處理後綴名為.html和.jsp送來的請求,那麼當請求者的後綴名為.html時,那麼DispatcherServlet就將請求交給ControllerA進行處理。
C代表Controller,負責用戶界面和業務邏輯層的通信控制,一方面解釋來自用戶界面的輸入,識別用戶動作(如點擊按鈕等),調用相應Model中的方法,另一方面處理來自Model的事件和返回的執行結果,調用適當的View顯示給用戶,Controller主要由Servlet完成。
M代表Model,負責整個解決方案的業務邏輯實現,底層的資料庫也由Model訪問和操作;
V代表View,負責系統向用戶的展示,主要由HTML及JSP等完成;
MVC組件說明:
以下組件通常使用框架提供實現:
DispatcherServlet:作為前端控制器,整個流程式控制制的中心,控制其它組件執行,統一調度,降低組件之間的耦合性,提高每個組件的擴展性。
HandlerMapping:通過擴展處理器映射器實現不同的映射方式,例如:配置文件方式,實現介面方式,註解方式等。
HandlAdapter:通過擴展處理器適配器,支持更多類型的處理器。
ViewResolver:通過擴展視圖解析器,支持更多類型的視圖解析,例如:jsp、freemarker、pdf、excel等。
組件:
1、前端控制器DispatcherServlet(不需要工程師開發),由框架提供
作用:接收請求,響應結果,相當於轉發器,中央處理器。有了dispatcherServlet減少了其它組件之間的耦合度。
用戶請求到達前端控制器,氏腔它就相當於mvc模式中的c,dispatcherServlet是整個流程式控制制的中心,由它調用其它組件處理用戶的請求,dispatcherServlet的存在降低了組件之間的耦合性。
2、處理器映射器HandlerMapping(不需要工程師開發),由框架提供
作用:根據請求的url查找Handler
HandlerMapping負責根據用戶請求找到Handler即處理器,springmvc提供了不同的映射器實現不同的映射方式,例如:配置文件方式,實現介面方式,註解方式碼並等。
3、處理器適配器HandlerAdapter
作用:按照特定規則(HandlerAdapter要求的規則)去執行Handler
通過HandlerAdapter對處理器進行執行,這是適配器模式的應用,通過擴展適配器可以對更多類型的處理器進行執行。
4、處理器Handler(需要工程師開發)
注意:編寫Handler時按照HandlerAdapter的要求去做,這樣適配器才可以去正確執行Handler
Handler 是繼DispatcherServlet前端控制器的後端控制器,在DispatcherServlet的控制下Handler對具體的用戶請求進行處理。
由於Handler涉及到具體的用戶業務請求,所以一般情況需要工程師根據業務需求開發Handler。
5、視圖解析器View resolver(不需要工程師開發),由框架提供
作用:進行視圖解析,根據邏輯視圖名解析成真正的視圖(view)
View Resolver負責將處理結果生成View視圖,View Resolver首先根據邏輯視圖名解析成物理視圖名即具體的頁面地址,再生成View視圖對象,最後對View進行渲染將處理結果通過頁面展示給用戶。
springmvc框架提供了很多的View視圖類型,包括:jstlView、freemarkerView、pdfView等。
一般情況下需要通過頁面標簽或頁面模版技術將模型數據通過頁面展示給用戶,需要由工程師根據業務需求開發具體的頁面。
6、視圖View(需要工程師開發jsp...)
View是一個介面,實現類支持不同的View類型(jsp、freemarker、pdf...)
❸ 《看透SpringMVC源代碼分析與實踐》pdf下載在線閱讀全文,求百度網盤雲資源
《看透SpringMVC源代碼分析與實踐》(韓路彪)電子書網盤下載免費在線閱讀
鏈接: https://pan..com/s/1vSy3Wd53qe91ak602kSGqw
書名:看透SpringMVC源代碼分析與實踐
作者:韓路彪
出版社:機械工業出版社
副標題:源代碼分析與實踐
原作名:韓路彪
出版年:2016-1-1
頁數:309
內容簡介
國內資深Web開發專家根據Spring MVC全新技術撰寫,基於實際生產環境,從基礎知識、源代碼和實戰3個維度對Spring MVC的結構和實現進行詳細講解
全面介紹Spring MVC的架構、原理、核心概念和操作,通過案例完整呈現Tomcat的實現,系統總結Spring MVC九大組件的處理以及常用的技巧和實踐
在大型網站和復雜系統的開發中,Java具有天然的優勢,而在Java的Web框架中Spring MVC以其強大的功能以及簡單且靈活的用法受到越來越多開發者的青睞。本書不僅詳細地分析Spring MVC的結構及其實現細節,而且講解網站的不同架構及其演變的過程,以及網路底層協議的概念及其實現方法,幫助讀者開發更高效的網站。
作者簡介
韓路彪當代知名作家。
❹ 如何實現springmvc將返回的給前端的pdf文件放在瀏覽器里預覽
1,在web路徑下建立一個uploadFiles文件夾。
2,在springMVC里映射PDF文件就像映射靜態文件那樣。
<mvc:resources mapping="/pdf/**" location="/uploadFiles/"/>
3,寫個controller返回PDF的URL路徑。
@Controller
@CrossOrigin(origins = "*")
public class PDFController {
@ResponseBody
@RequestMapping(value = "/pdf", method = RequestMethod.GET)
public String pdfDownload() throws IOException
{
String retString = null;
String dir = XXXX文件在伺服器中路徑。
String path = httpServletRequest.getRequestURL() + dir.substring(dir.lastIndexOf('\'));
retString = path.replaceAll("\\","/");
Map<String,Object >map = new HashMap<>();
map.put("code",0);
map.put("pdf",retString);
return JSON.toJSONString(map);
}
}
4,返回的JSON數據。
{"code":0,"pdf":"8080/pdf/1472128890165sample.pdf"},前面加上http://127.0.0.1:。
5,瀏覽器中直接打開pdf這個url就可以預覽PDF啦。
❺ 求Spring MVC MYBatis企業應用實戰 PDF
鏈接:https://pan..com/s/1htt8VHi
密碼:vy2s
❻ ireport列印pdf,使用spring mvc,瀏覽器顯示空白,pdf報表不顯示任何東西,...空白....
report的屬性里,有一行when no data屬性,選擇第一項,就可以完全顯示了
❼ 《文學批評方法手冊》pdf下載在線閱讀,求百度網盤雲資源
《文學批評方法手冊》([美] 威爾弗雷德·L·古爾靈)電子書網盤下載免費在線閱讀
鏈接:https://pan..com/s/1bbdMo-xhlRgiP3I6cQTsSQ
書名:文學批評方法手冊
作者:[美] 威爾弗雷德·L·古爾靈
譯者:姚錦清
豆瓣評分:8.6
出版社:春風文藝出版社
出版年份:1988-10
頁數:492