需求是这样的,公司有一个合同,很多位置是固定不变的,比如说页眉,页脚,一些相关的注释
合同中的有相关产品信息,比如库存号,价格等等,类似于购物车,合同用数据库里面一条订单信息生成的
这些产品信息是动态的,怎么把数据库中订单生成合同,也是生成一个有固定格式的word文档?请教DX...不知道我的描述是否清楚

解决方案 »

  1.   

    你可以把客户的某些需求做成不同的DIV层让她自己选择需要的层,不需要的可以隐藏
      

  2.   

    目前在项目中有三种方式可以实现:
    第一种方式,合同文本用网页做好,再加上一些样式,用户点生成合同文本,就会打开一个有合同样式的网页,数据插入完成和jsp参数显示及iteator插入list数据一样。然后这个网页上有打印按钮,window.print就行了。这种方法的缺点是文本不可编辑,打印前不可进行页面边距设置。
    第二种方式,生成word,在合同的word模板中需要插入数据的地方设置书签,然后在jsp页面调用 word的宏,读取书签,在指定位置插入数据,格式化文本样式。将数据全部生成后,显示这个已插入数据的word文档。
    第三种方式,生成excel,在excel中将合同模板先设计好(网格线设置为默认不显示网格线,在模板中将需要网格线的地方加上网格线),然后可以用jxl或poi在操作数据。生成后会弹出一个提示用户下载的窗口(个人感觉这个用户比较喜欢)。
      

  3.   


    谢谢你提供的很详细我还有个疑问
    第二种方式,生成word文档,设置书签,jsp页面调用word的宏,有没有这方面的资料呢
      

  4.   

    以前项目中使用的 供你参考 呵呵/**
     * @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;
    }
    }
      

  5.   

    用word另存为html格式,再把这个html转成jsp文件,然后再把那些的数据插入到固定的位置。最后写个下载的action
      

  6.   

    public String makeWordFile() throws Exception {
            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>
      

  7.   


    这doc文档是哪里来的,要知道这个文档的内容是动态的啊
      

  8.   

    一开始先把doc文档模板转化成为jsp,那些动态内容是你从数据库里取的,你把这些数据放到jsp中,makeWordFile()的 forward跳转到你用doc文档模板转化成为的jsp,再给这个文件设置下文件名
    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);
            
    }
      

  9.   


    我有点懂你的意思的
    1. 先将一个word模板转为jsp,将那些动态信息的位置空出来
    2. 然后往这个jsp里面写数据,其实这个jsp也就是一个模板
    3. 然后将这个jsp里面的内容,写进一个word文档但是我的word模板里面有图片,是怎么处理的
      

  10.   

    不管word还是网页,打印出来还不是白纸黑字,只要格式一样就行了
    还是用velocity模板引擎吧