① MVC界面如何下载pdf文件
在页面中直接打开PDF(要求机器已安装adobe reader),则只需要修改HTTP标头的参数:
将“Response.AddHeader("content-disposition", "attachment; filename=AdmissionTicket.pdf");”替换成“Response.AddHeader("content-disposition", string.Format("inline;filename={0}.pdf", admissionFormId));”
② 如何把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 用什么pdf插件阅读起
可以用:Foxit Phantom:
④ 有用springmvc的IText开发过PDf的吗求教
我下载的里面包含了 itextpdf-5.2.0.jar itextpdf-5.2.0-javadoc.jar itextpdf-5.2.0-sources.jar itext-xtra-5.2.0.jar itext-xtra-5.2.0-javadoc.jar itext-xtra-5.2.0-sources.jar 你的应该不全,自己再去找。
⑤ 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.....");
}
⑥ 谁有asp.net mvc3.0 高级编程 完成版的pdf书籍啊
目前没有 电子版 我也在找。。。 你有什么好书 我们共享下 [email protected]
⑦ 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));”
⑧ 精通Struts2:基于MVC的JavaWeb应用开发实战 pdf
李刚的那本好.我就买了一本.
可以说李刚的那一套一系列的都不错.李刚有本轻量级J2EE企业应用实战.
非常棒,强烈推荐.
我以前买过一本孙卫琴的讲基本MVC的开发,不过是STRUTS1.2的
至于PDF版本的,可以去网络文库搜索下或者去电驴搜索
STRUTS2有本叫权威指南来着,现在应该有STRUTS2.1权威指南,那本可以作为开发人员必备的手册,不适合入门.
这个嘛,得支持正版,有些书保护得比较好,没有流传出PDF的版本.得花钱买网上买了.