最近有需求将数据导出到word里,然后编辑打印。
想过几种方案:
1.使用jacob。
2.使用apache的poi。
3.使用itext。
由于时间比较紧,没多的时候去学习研究上述工具包,现在用javascript操作ActiveXObject控件,用替换word模板中的书签方式解决。
前提条件:
1.浏览器安全级别降低,可以使用ActiveXObject控件。
2.装有office word。
目前实现了替换单个书签,多行表格书签,和图片,基本上满足需求。不过还有很多操作word的使用方法不太清楚,网上大部分都使用的VB,有不清楚的地方,大家可以交流。
下面说一下我的设计实现思路:
首先当然是定义word模板,在需要替换的地方加上标签。 菜单-插入-书签,输入属性名,如year,date,pic1,voList等等。
打印页面:
需要把打印的数据从后台取出,以单个vo(一个对象)为一组,或以voList(对象的列表集合)为一组 组织好页面上 再得到这些数据后进行替换。
数据组织形式如下:
使用:
注意:
替换图片的值需要解释一下:
1.可以设为相对本页面的路径如../zbgl/abc.png
2.如果是输出流,则需要把请求输出流的url映射成以图片格式结尾的。如/.../abc.do?id=123换成/../abc.png?id=123
可以在web.xml里配一个servlet,如以*.png的请求转成.do的。如:
public class PngDispatcherServlet extends HttpServlet {
private static final long serialVersionUID = 6230740581031996144L;
public void init() throws ServletException {
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
doGet(request, response);
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
//StringBuffer url = request.getRequestURL();
StringBuffer url = new StringBuffer(request.getRequestURI());
if(request.getQueryString() != null) {
url.append('?');
url.append(request.getQueryString());
}
String newUrl = url.toString().replaceAll(".png", ".do");
ServletContext sc = getServletContext();
RequestDispatcher rd = sc.getRequestDispatcher(newUrl); //定向的页面
rd.forward(request, response);
}
}
12下一页阅读全文



