需求是这样的,公司有一个合同,很多位置是固定不变的,比如说页眉,页脚,一些相关的注释
合同中的有相关产品信息,比如库存号,价格等等,类似于购物车,合同用数据库里面一条订单信息生成的
这些产品信息是动态的,怎么把数据库中订单生成合同,也是生成一个有固定格式的word文档?请教DX...不知道我的描述是否清楚
合同中的有相关产品信息,比如库存号,价格等等,类似于购物车,合同用数据库里面一条订单信息生成的
这些产品信息是动态的,怎么把数据库中订单生成合同,也是生成一个有固定格式的word文档?请教DX...不知道我的描述是否清楚
第一种方式,合同文本用网页做好,再加上一些样式,用户点生成合同文本,就会打开一个有合同样式的网页,数据插入完成和jsp参数显示及iteator插入list数据一样。然后这个网页上有打印按钮,window.print就行了。这种方法的缺点是文本不可编辑,打印前不可进行页面边距设置。
第二种方式,生成word,在合同的word模板中需要插入数据的地方设置书签,然后在jsp页面调用 word的宏,读取书签,在指定位置插入数据,格式化文本样式。将数据全部生成后,显示这个已插入数据的word文档。
第三种方式,生成excel,在excel中将合同模板先设计好(网格线设置为默认不显示网格线,在模板中将需要网格线的地方加上网格线),然后可以用jxl或poi在操作数据。生成后会弹出一个提示用户下载的窗口(个人感觉这个用户比较喜欢)。
谢谢你提供的很详细我还有个疑问
第二种方式,生成word文档,设置书签,jsp页面调用word的宏,有没有这方面的资料呢
* @return the author
* @uml.property name="author"
*/
@Override
public String getAuthor() throws Exception {
// TODO Auto-generated method stub
POIFSReader r = new POIFSReader();
fileInputStream = new FileInputStream(filename);
r.registerListener(new AuthorPOIFSReaderListener(),
"\005SummaryInformation");
r.read(fileInputStream);
fileInputStream.close();
if (author == null) {
author = "";
}
return author;
} /**
* @return the filename
* @uml.property name="filename"
*/
@Override
public String getFilename() {
// TODO Auto-generated method stub
return super.getFilename();
} /**
* @return the text
* @uml.property name="text"
*/
@Override
public String getText() throws Exception {
// TODO Auto-generated method stub
// System.out.println(filename);
fileInputStream = new FileInputStream(filename);
if(fileInputStream!=null){
// System.out.println("good release");
return this.extractText(fileInputStream);}
else {
// System.out.println("can,t release");
return "";
}
}
/**
* @return the title
* @uml.property name="title"
*/
@Override
public String getTitle() throws Exception {
// TODO Auto-generated method stub
POIFSReader r = new POIFSReader();
fileInputStream = new FileInputStream(filename);
r.registerListener(new TitlePOIFSReaderListener(),
"\005SummaryInformation");
r.read(fileInputStream);
fileInputStream.close();
if (title == null) {
title = "";
}
return title;
} /**
* @return the subject
* @uml.property name="subject"
*/
public String getSubject() throws IOException {
// TODO Auto-generated method stub
POIFSReader r = new POIFSReader();
fileInputStream = new FileInputStream(filename);
r.registerListener(new SubjectPOIFSReaderListener(),
"\005SummaryInformation");
r.read(fileInputStream);
fileInputStream.close();
if (subject == null) {
subject = "";
}
return subject;
} /**
* @return the pageCount
* @uml.property name="pageCount"
*/
public int getPageCount() throws IOException {
// TODO Auto-generated method stub
POIFSReader r = new POIFSReader();
fileInputStream = new FileInputStream(filename);
r.registerListener(new PageCountPOIFSReaderListener(),
"\005SummaryInformation");
r.read(fileInputStream);
fileInputStream.close();
return pageCount;
}
}
RequestHashNew reh = new RequestHashNew(req, res);
String fileTitle = req.getParameter("title");
fileTitle = "文件名";
String forward = req.getParameter("forward");
forward = "notice";
String fileName = fileTitle + ".doc";
try {
ReportUtil.setFileName(req, res, fileName);//设置文件名
} catch (Exception e) {
e.printStackTrace();
} finally {
reh.clear();
}
return forward;
}
<action name="makeWordFile" class="你的action类" method="makeWordFile">
<result name="notice">/jsp/你的jsp</result>
<result name="error">/default.jsp</result>
</action>
这doc文档是哪里来的,要知道这个文档的内容是动态的啊
public static void setFileName(HttpServletRequest request,HttpServletResponse response,String fileName) throws UnsupportedEncodingException{
String uri=request.getRequestURI();
String cnn=uri.substring(uri.lastIndexOf("/")+1,uri.lastIndexOf("."))+".doc";
String headerDisp = "attachment;filename=" + fileName;
headerDisp = new String(headerDisp.getBytes("GBK"), "iso8859-1");
HttpServletResponse hresponse = (HttpServletResponse) response;
hresponse.setHeader("content-disposition", headerDisp);
}
我有点懂你的意思的
1. 先将一个word模板转为jsp,将那些动态信息的位置空出来
2. 然后往这个jsp里面写数据,其实这个jsp也就是一个模板
3. 然后将这个jsp里面的内容,写进一个word文档但是我的word模板里面有图片,是怎么处理的
还是用velocity模板引擎吧