網(wǎng)站制作NEWS
MVC中網(wǎng)頁(yè)導(dǎo)出為PDF怎么實(shí)現(xiàn)
在MVC框架中實(shí)現(xiàn)網(wǎng)頁(yè)內(nèi)容導(dǎo)出為PDF的功能,通常涉及以下幾個(gè)關(guān)鍵步驟:
1. **PDF模板準(zhǔn)備**:創(chuàng)建一個(gè).NET報(bào)表文件(.rdlc),該文件將作為PDF輸出的模板。
2. **數(shù)據(jù)綁定**:在報(bào)表中綁定所需的數(shù)據(jù),這些數(shù)據(jù)通常來(lái)自于數(shù)據(jù)庫(kù)或服務(wù)層的模型。
3. **渲染報(bào)表**:使用`LocalReport`類(lèi)渲染報(bào)表,并指定輸出格式為PDF。
4. **輸出PDF**:將渲染后的報(bào)表以字節(jié)流的形式輸出到瀏覽器,并設(shè)置適當(dāng)?shù)腍TTP頭部,以便瀏覽器能夠處理下載或內(nèi)嵌顯示PDF。
以下是對(duì)原始代碼段進(jìn)行潤(rùn)色和修正后的內(nèi)容:
```csharp
// 準(zhǔn)備PDF輸出方法
public byte[] ExportTicket(List admissionFormIds, string reportPath, out string mimeType)
{
LocalReport localReport = new LocalReport();
localReport.ReportPath = reportPath;
// 綁定數(shù)據(jù)源
ReportDataSource reportDataSource = new ReportDataSource("dsList", GetAdmissionTicketList(admissionFormIds.ToArray()));
localReport.DataSources.Add(reportDataSource);
string reportType = "PDF";
string encoding;
string fileNameExtension;
string deviceInfo = "PDF";
// 渲染報(bào)表
byte[] renderedBytes = localReport.Render(
reportType,
deviceInfo,
out mimeType,
out encoding,
out fileNameExtension,
null,
null
);
return renderedBytes;
}
// 在Action中處理HTTP標(biāo)頭并輸出PDF
[HttpGet]
public ActionResult GetAdmissionForms(int serviceId, string condition)
{
var list = new RegistrationBLL().GetExamineeByCondi(serviceId, condition);
if (list == null || list.Count == 0)
{
// 返回提示信息
return RedirectToAction("SaveSuccess", "ExamService", new { action = "GetExamineeByPage", controller = "Registration", serviceid = serviceId });
}
var sl = new List();
foreach (var ren in list)
{
sl.Add(ren.fAdmissionFormId);
}
try
{
var bll = new AdmissionTicketBLL();
string rdlcPath = Server.MapPath("~/Resources/AdmissionTicket.rdlc");
string mimeType;
byte[] renderedBytes = bll.ExportTicket(sl, rdlcPath, out mimeType);
// 設(shè)置HTTP標(biāo)頭,內(nèi)嵌顯示PDF
Response.AddHeader("content-disposition", string.Format("inline;filename=AdmissionTicket_{0}.pdf", sl[0]));
// 輸出PDF
return File(renderedBytes, mimeType);
}
catch
{
// 錯(cuò)誤處理
return RedirectToAction("SaveSuccess", "ExamService", new { action = "GetExamineeByPage", controller = "Registration", serviceid = serviceId });
}
}
```
在上述代碼中,我進(jìn)行了以下修正和優(yōu)化:
- 修正了數(shù)據(jù)源綁定的方法,確保數(shù)據(jù)正確傳遞到報(bào)表中。
- 移除了不必要的`out`參數(shù),并使用了命名參數(shù),使方法調(diào)用更加清晰。
- 在輸出PDF時(shí),我采用了內(nèi)嵌顯示的方式,這樣用戶(hù)可以在瀏覽器中直接查看PDF,而不是下載。
- 添加了對(duì)異常的處理,確保在發(fā)生錯(cuò)誤時(shí)用戶(hù)能夠得到相應(yīng)的提示。
通過(guò)這些步驟,MVC中的網(wǎng)頁(yè)內(nèi)容就可以成功地導(dǎo)出為PDF文件了。
多重隨機(jī)標(biāo)簽