1. MVC中網頁導出為pdf怎麼實現
最近做過一個將頁面表格導出至PDF的功能,現在將它整理出來,以備不時之需。
PDF模板是用的是.net報表文件(.rdlc),原理就是將數據填充到報表文件中,利用Microsoft.Reporting.WebForms.LocalReport類的方法,輸出PDF位元組流,然後,通過定義Response的HTTP標頭定義,在瀏覽器輸出PDF文件。
以下是關鍵部分的代碼:
1. 首先,准備一個輸出PDF位元組流的方法:
usingSystem;
usingSystem.Collections.Generic;
usingATA.Toeic.Models;
usingATA.Toeic.DAL;
usingSystem.IO;
usingMicrosoft.Reporting.WebForms;
namespaceATA.Toeic.BLL
{
publicclassAdmissionTicketBLL
{
privateRegistrationDALdal=newRegistrationDAL();
///<summary>
///『單個導出』
///導出包含一張准考證的pdf文件
///</summary>
///<paramname="addmissionFormId">准考證號</param>
///<paramname="reportPath">報表模板路徑</param>
///<returns>pdf文件位元組流</returns>
publicbyte[]ExportTicket(stringaddmissionFormId,stringreportPath,outstringmimeType)
{
List<string>arrId=newList<string>();
arrId.Add(addmissionFormId);
returnExportTicket(arrId,reportPath,outmimeType);
}
///<summary>
///『批量導出』
///導出多張准考證的pdf文件
///</summary>
///<paramname="arrAddmissionFormId">需要導出的准考證號</param>
///<returns>pdf文件位元組流</returns>
publicbyte[]ExportTicket(List<string>arrAddmissionFormId,stringreportPath,outstringmimeType)
{
LocalReportlocalReport=newLocalReport();
localReport.ReportPath=reportPath;
//報表對象的模板文件的路徑
//報表對象的數據源
=newReportDataSource("dsList",GetAdmissionTicketList(arrAddmissionFormId.ToArray())
//這個方法返回一個IList<Model>對象);
localReport.DataSources.Add(reportDataSource);
stringreportType="PDF";
stringencoding;
stringfileNameExtension;
//
//http://msdn2.microsoft.com/en-us/library/ms155397.aspx
stringdeviceInfo="<DeviceInfo><OutputFormat>PDF</OutputFormat></DeviceInfo>";Warning[]warnings;string[]streams;byte[]renderedBytes;//Renderthereport
renderedBytes=localReport.Render(reportType,deviceInfo,outmimeType,outencoding,outfileNameExtension,outstreams,outwarnings);
returnrenderedBytes;
}
}
}
2.在action中定義HTTP標頭,輸出PDF文件,在這里批量和單個已經沒有區別了,區別包含在byte[]的位元組流中。
[CheckServiceExpire]
(intserviceid,stringCondition)
{
List<RegistrationEn>list=newRegistrationBLL().GetExamineeByCondi(serviceid,Condition);
if(list==null||list.Count==0)
returnAlert("目前沒有準考證信息!","~/Views/ExamService/SaveSuccess.aspx",new{action="GetExamineeByPage",controller="Registration",serviceid=serviceid});
List<string>sl=newList<string>();
foreach(RegistrationEnreninlist)
sl.Add(ren.fAdmissionFormId);
try
{
AdmissionTicketBLLbll=newAdmissionTicketBLL();
stringrdlcPath=Server.MapPath("~/Resources/AdmissionTicket.rdlc");
stringmimeType;
byte[]renderedBytes=bll.ExportTicket(sl,rdlcPath,outmimeType);
Response.AddHeader("content-disposition","attachment;filename=AdmissionTicket.pdf");
returnFile(renderedBytes,mimeType);
}catch{
returnAlert("獲取准考證信息出錯!","~/Views/ExamService/SaveSuccess.aspx",new{action="GetExamineeByPage",controller="Registration",serviceid=serviceid});
}
}
這樣就可以正常導出PDF文件了。
補充:
如果想在頁面中直接打開PDF(要求機器已安裝adobe reader),則只需要修改HTTP標頭的參數:
將「Response.AddHeader("content-disposition", "attachment; filename=AdmissionTicket.pdf");」替換成「Response.AddHeader("content-disposition", string.Format("inline;filename={0}.pdf", admissionFormId));」
2. spring mvc框架 加ireport模板列印pdf文件異常 高手指點
為什麼不直接用servlet?
if ("pdf".equals(strfiletype.trim())) {//導出pdf
System.out.println("導出pdf.........");
byte[] bytes = JasperRunManager.runReportToPdf(reportFile
.getPath(), parameters, conn);
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
String filename = null;
if(exportFileName != null && !exportFileName.equals("")){
filename = exportFileName + ".pdf";
}else{
filename = DateTime.getSystemDateTimeString() + ".pdf";
}
String fileName = new String(filename.getBytes("GBK"),
"ISO8859_1");
response.setHeader("Content-disposition",
"attachment; filename=" + fileName);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
response.setStatus(response.SC_OK);
response.flushBuffer();
System.out.println("導出pdf....end.....");
}
3. 《看透SpringMVC源代碼分析與實踐》pdf下載在線閱讀,求百度網盤雲資源
《看透Spring MVC》(韓路彪)電子書網盤下載免費在線閱讀
資源鏈接:
鏈接:
書名:看透Spring MVC
作者:韓路彪
豆瓣評分:6.8
出版社:機械工業出版社
出版年份:2016-1-1
頁數:309
內容簡介:
國內資深Web開發專家根據Spring MVC全新技術撰寫,基於實際生產環境,從基礎知識、源代碼和實戰3個維度對Spring MVC的結構和實現進行詳細講解
全面介紹Spring MVC的架構、原理、核心概念和操作,通過案例完整呈現Tomcat的實現,系統總結Spring MVC九大組件的處理以及常用的技巧和實踐
在大型網站和復雜系統的開發中,Java具有天然的優勢,而在Java的Web框架中Spring MVC以其強大的功能以及簡單且靈活的用法受到越來越多開發者的青睞。本書不僅詳細地分析Spring MVC的結構及其實現細節,而且講解網站的不同架構及其演變的過程,以及網路底層協議的概念及其實現方法,幫助讀者開發更高效的網站。
通過本書,你將:
系統學習網站的各種架構以及每種架構所針對的問題。
深入分析Web底層協議及其實現方法。
系統理解Spring MVC框架,為靈活開發高質量產品打下堅實基礎。
深入理解Spring MVC的編程技巧和設計理念,提高綜合思考、整體架構的能力。
學習作者自研的源代碼分析方法——器用分析法,高效學習程序源代碼。
4. MVC4中怎麼將視圖打開為新窗口,調用window.open不好用!
在tab頁裡面打開其實就是新窗口,如果想要你所謂的那伏租種新窗口 ,在ie下面凱雹設置即可:工具-internet選項-選項盯廳帆卡
5. 如何實現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啦。
6. 《PHP高級程序設計模式框架與測試》pdf下載在線閱讀全文,求百度網盤雲資源
《PHP高級程序設計模式框架與測試》網路網盤pdf最新全集下載:
鏈接:https://pan..com/s/1-71lP8UukjGVFygLldsTYw
7. 寫出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...)
8. 如何實現springmvc將返回的給前端的pdf文件放在瀏覽器里預覽
你好可以打開軟體管家在里邊下載安裝PDF閱讀器,安裝後就可以在瀏覽器里顯示。
9. 如何實現springmvc將返回的給前端的pdf文件放在瀏覽器里預覽
你好你可以在電腦里安裝PDF閱讀器,安裝後就可以在瀏覽器中預覽。
10. asp.net mvc 4如何輸出pdf
試試這個代碼:
usingSystem;
usingSystem.IO;
usingSystem.Text;
usingSystem.Collections;
namespacePDFGenerator
{
publicclassPDFGenerator
{
staticfloatpageWidth=594.0f;
staticfloatpageDepth=828.0f;
staticfloatpageMargin=30.0f;
staticfloatfontSize=20.0f;
staticfloatleadSize=10.0f;
static山餘明StreamWriterpPDF=newStreamWriter("E:\myPDF.pdf");
staticMemoryStreammPDF=newMemoryStream();
(stringstrMsg)
{
Byte[]buffer=null;
buffer=ASCIIEncoding.ASCII.GetBytes(strMsg);
mPDF.Write(buffer,0,buffer.Length);
buffer=null;
}
staticstringxRefFormatting(longxValue)
{
stringstrMsg=xValue.ToString();
intiLen=strMsg.Length;
if(iLen<10)
{
StringBuilders=newStringBuilder();
inti=10-iLen;
s.Append('0',i);
strMsg=s.ToString()+strMsg;
}
returnstrMsg;
}
staticvoidMain(string[]args)
{
ArrayListxRefs=newArrayList();
//Byte[]buffer=null;
floatyPos=0f;
longstreamStart=0;
longstreamEnd=0;
longstreamLen=0;
stringstrPDFMessage=null;
//PDF文檔頭信息
strPDFMessage="%PDF-1.1 ";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="10obj ";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="<</Length20R>> ";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="stream ";
ConvertToByteAndAddtoStream(strPDFMessage);
////////PDF文檔描述
streamStart=mPDF.Length;毀冊
//字體
strPDFMessage="BT /F0"+fontSize+"Tf ";
ConvertToByteAndAddtoStream(strPDFMessage);
//PDF文檔實體高度
yPos=pageDepth-pageMargin;
strPDFMessage=pageMargin+""+yPos+"Td ";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage=leadSize+"TL "逗告;
ConvertToByteAndAddtoStream(strPDFMessage);
//實體內容
strPDFMessage="(http://www.wenhui.org)Tj ";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="ET ";
ConvertToByteAndAddtoStream(strPDFMessage);
streamEnd=mPDF.Length;
streamLen=streamEnd-streamStart;
strPDFMessage="endstream endobj ";
ConvertToByteAndAddtoStream(strPDFMessage);
//PDF文檔的版本信息
xRefs.Add(mPDF.Length);
strPDFMessage="20obj "+streamLen+" endobj ";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="30obj <</Type/Page/Parent40R/Contents10R>> endobj ";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="40obj <</Type/Pages/Count1 ";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="/Kids[ 30R ] ";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="/Resources<</ProcSet[/PDF/Text]/Font<</F050R>>>> ";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="/MediaBox[00"+pageWidth+""+pageDepth+"] >> endobj ";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="50obj <</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding/WinAnsiEncoding>> endobj ";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="60obj <</Type/Catalog/Pages40R>> endobj ";
ConvertToByteAndAddtoStream(strPDFMessage);
streamStart=mPDF.Length;
strPDFMessage="xref 07 000000000065535f ";
for(inti=0;i<xRefs.Count;i++)
{
strPDFMessage+=xRefFormatting((long)xRefs[i])+"00000n ";
}
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="trailer << /Size"+(xRefs.Count+1)+" /Root60R >> ";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="startxref "+streamStart+" %%EOF ";
ConvertToByteAndAddtoStream(strPDFMessage);
mPDF.WriteTo(pPDF.BaseStream);
mPDF.Close();
pPDF.Close();
}
}