自动生成并导出word文档

摘要:
今天很荣幸又破解一现实难题:自动生成并导出word文档先看页面效果:word效果:代码:先搭建struts2项目创建action,并在struts.xml完成注册˂?

今天很荣幸又破解一现实难题:自动生成并导出word文档

先看页面效果:

页面下载效果

word效果:

自动生成并导出word文档第2张

自动生成并导出word文档第3张

代码:

  1. 先搭建struts2项目
  2. 创建action,并在struts.xml完成注册
  3. <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
        <!--Overwrite Convention -->
        <constant name="struts.configuration.xml.reload"value="true"/>
        <constant name="struts.devMode"value="false"/>
        <constant name="struts.ui.theme"value="simple"/>
        <constant name="struts.i18n.encoding"value="UTF-8" />
        <constant name="struts.ognl.allowStaticMethodAccess"value="true"/>
        <constant name="struts.multipart.maxSize"value="20971520" />
        
        
        <package name="SK"extends="struts-default"namespace="/">
            <action name="user!*"class="qh.sk.action.UserAction"method="{1}">
               <result name="{1}">/WEB-INF/user-{1}.jsp</result>
                   <result name="exportFile"type="stream">
                      <param name="contentType">application/octet-stream</param>
                    <param name="inputName">inputStream</param>
                    <param name="contentDisposition">attachment;filename="${fileName}"</param>
                    <param name="bufferSize">4096</param>
                </result>
            </action>
        </package>
    </struts>

UserAction部分:

packageqh.sk.action;

importjava.awt.Color;
importjava.io.File;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.UnsupportedEncodingException;
importjava.util.HashMap;
importjava.util.List;
importjava.util.UUID;

importorg.apache.struts2.ServletActionContext;
importorg.framework.util.DateUtil;
importorg.framework.util.FileUtil;

importcom.lowagie.text.BadElementException;
importcom.lowagie.text.Cell;
importcom.lowagie.text.Document;
importcom.lowagie.text.DocumentException;
importcom.lowagie.text.Element;
importcom.lowagie.text.Font;
importcom.lowagie.text.PageSize;
importcom.lowagie.text.Paragraph;
importcom.lowagie.text.Table;
importcom.lowagie.text.pdf.BaseFont;
importcom.lowagie.text.rtf.RtfWriter2;
importcom.lowagie.text.rtf.style.RtfFont;
importcom.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
public class UserAction extendsActionSupport{

    privateString fileName;
    privateInputStream inputStream;
    publicString getFileName() {
        try{
            String filename = new String(this.fileName.getBytes("GBK"),"ISO8859-1");
            returnfilename;
        } catch(UnsupportedEncodingException e) {
            e.printStackTrace();
            return "code";
        }    
    }
    public voidsetFileName(String fileName) {
        this.fileName =fileName;
    }

    publicInputStream getInputStream() {
        returninputStream;
    }
    public voidsetInputStream(InputStream inputStream) {
        this.inputStream =inputStream;
    }
    public String test() throwsDocumentException, IOException{
        String tempFolder = ServletActionContext.getServletContext().getRealPath("/temp/"+UUID.randomUUID());
        FileUtil.newFolder(tempFolder);
        String doc_outlearn=tempFolder+"/temp.doc";
        File file =null;
        try{
            file = newFile(doc_outlearn);
            Document document = new Document(PageSize.A4, 50, 50, 50, 50); 
            RtfWriter2.getInstance(document, newFileOutputStream(file)); 
            document.open(); 
            exportWords(document);
            document.close(); 
            this.setFileName("SK1995.doc");
            this.inputStream =newjava.io.FileInputStream(doc_outlearn);
        } catch(Exception e) {
            //TODO Auto-generated catch block
e.printStackTrace();
        }
        finally{
            file.deleteOnExit();
        }
        return "exportFile";
    }
    
    public void exportWords(Document document) throwsDocumentException, IOException{
        //设置中文字体 
        float sureWidths[]={8f,8f,8f,8f,8f,8f,10f,10f,8f,8f,8f,8f};
        document.setMargins(50f, 50f, 50f, 50f);
        RtfFont headFont = new RtfFont("华文细黑", 24, Font.BOLD, Color.BLACK); 
        Paragraph title= new Paragraph("

SK个人项目
申	请	书



",headFont);
        title.setAlignment(Element.ALIGN_CENTER);
        RtfFont titleFont = new RtfFont("华文细黑", 16, Font.BOLD, Color.BLACK);
        document.add(title);
        
        Table firstTable = new Table(2);
        float firstWidths[]={30f,70f};
        firstTable.setWidths(firstWidths);
        firstTable.setWidth(90);
        firstTable.setBorder(0);
        firstTable.setBorderWidth(0); 
        firstTable.addCell(fillCellWithNoBorder("项目名称:",titleFont,Element.ALIGN_RIGHT,10,0,0));
        firstTable.addCell(fillCellWithBottomBorder("SK",titleFont,Element.ALIGN_LEFT,10,0,0));
        firstTable.addCell(fillCellWithNoBorder("项目负责人:",titleFont,Element.ALIGN_RIGHT,10,0,0));
        firstTable.addCell(fillCellWithBottomBorder("SK1995",titleFont,Element.ALIGN_LEFT,10,0,0));
        
        document.add(firstTable);
        Paragraph _paragraph=setParagraphStyle(titleFont,0f,20f,0f,Paragraph.ALIGN_CENTER,8);
        _paragraph.add("

"+DateUtil.getNow("yyyy 年  MM 月  dd"));
        document.add(_paragraph);
        document.newPage();
        RtfFont contextFont = new RtfFont("华文仿 宋 _GB2312", 12, Font.NORMAL, Color.BLACK);
        RtfFont contextBoldFont = new RtfFont("华文仿 宋 _GB2312", 12, Font.BOLD, Color.BLACK);
        Table xmTable = new Table(12);
        xmTable.setWidths(sureWidths);
        xmTable.setWidth(100);
        xmTable.setAlignment(Table.ALIGN_CENTER);
        xmTable.addCell(fillCell("姓名",contextBoldFont,Element.ALIGN_CENTER,3,6));
        xmTable.addCell(fillCell("SK1995",contextFont,Element.ALIGN_CENTER,3,6));
        xmTable.addCell(fillCell("年龄",contextBoldFont,Element.ALIGN_CENTER,3,6));
        xmTable.addCell(fillCell("1995",contextFont,Element.ALIGN_CENTER,3,6));
        document.add(xmTable);    
    }
    public Cell fillCellWithNoBorder(String value, RtfFont contextFont,int align,int spacing,int colspans,int rowspan) throwsBadElementException
    {
         Cell cell=newCell();
         cell.setHorizontalAlignment(align);
         cell.setVerticalAlignment(Element.ALIGN_MIDDLE); 
         cell.setBorderWidth(0);
         if (colspans>0)
         {
             cell.setColspan(colspans);
         }
         if (rowspan>0)
         {
             cell.setRowspan(rowspan);
         }
         Paragraph label= newParagraph(value, contextFont);
         label.setSpacingBefore(spacing);
         label.setSpacingAfter(spacing);
         cell.addElement(label);
         returncell;
    }
    public Cell fillCellWithBottomBorder(String value, RtfFont contextFont,int align,int spacing,int colspans,int rowspan) throwsBadElementException
    {
         Cell cell=newCell();
         cell.setHorizontalAlignment(align);
         cell.setVerticalAlignment(Element.ALIGN_MIDDLE); 
         cell.setBorderWidthTop(0);
         cell.setBorderWidthLeft(0);
         cell.setBorderWidthRight(0);
         cell.setBorderWidthBottom(1);
         if (colspans>0)
         {
             cell.setColspan(colspans);
         }
         if (rowspan>0)
         {
             cell.setRowspan(rowspan);
         }
         Paragraph label= newParagraph(value, contextFont);
         label.setSpacingBefore(spacing);
         label.setSpacingAfter(spacing);
         cell.addElement(label);
         returncell;
    }
    public Cell fillCell(String value, RtfFont contextFont,int align,int spacing,int colspans) throwsBadElementException
    {
         Cell cell=newCell();
         cell.setHorizontalAlignment(align);
         cell.setVerticalAlignment(Element.ALIGN_MIDDLE); 
         if (colspans>0)
         {
             cell.setColspan(colspans);
         }
         Paragraph label= newParagraph(value, contextFont);
         label.setSpacingBefore(spacing);
         label.setSpacingAfter(spacing);
         cell.addElement(label);
         returncell;
    }
    public Cell fillCell(String value, RtfFont contextFont,int align,int spacing,int colspans,int rowspan) throwsBadElementException
    {
         Cell cell=newCell();
         cell.setHorizontalAlignment(align);
         cell.setVerticalAlignment(Element.ALIGN_MIDDLE); 
         if (colspans>0)
         {
             cell.setColspan(colspans);
         }
         if (rowspan>0)
         {
             cell.setRowspan(rowspan);
         }
         Paragraph label= newParagraph(value, contextFont);
         label.setSpacingBefore(spacing);
         label.setSpacingAfter(spacing);
         cell.addElement(label);
         returncell;
    }
    public Paragraph setParagraphStyle(Font font , float firstLineIndent , float leading , float indentationRight , int alignment, intspacing)
    {  
        Paragraph _paragraph = newParagraph();  
        _paragraph.setFont(font);
        _paragraph.setFirstLineIndent(firstLineIndent);  
        _paragraph.setLeading(leading);  
        _paragraph.setIndentationRight(indentationRight);  
        _paragraph.setAlignment(alignment);  
        _paragraph.setSpacingBefore(spacing);
        _paragraph.setSpacingAfter(spacing);
       return_paragraph;  
    }
}

启动tomcat,http://localhost:8080/test/user!test

完成!

免责声明:文章转载自《自动生成并导出word文档》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇protobuf中文教程(第一篇)Jmeter动态遍历,变量嵌套下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

PHP是怎么运行的

严格来说,与PHP相关的过程不需要手动启动。它们与Apache启动一起运行。当然,如果需要重新启动PHP服务,可以手动重新启动PHP。最后,它被移交给PHP内核的ZendEngine进行顺序执行。PHP在开始执行后将经历两个主要阶段:处理请求之前的开始阶段和请求之后的结束阶段。PHP的结束阶段分为两个阶段:禁用模块和关闭模块。...

vscode 用户设置与工作区设置

用户设置与工作空间设置VSCode提供了两种设置方式:-用户设置:这种方式进行的设置,会应用于该用户打开的所有工程;-工作空间设置:工作空间是指使用VSCode打开的某个文件夹,在该文件夹下会创建一个名为.vscode的隐藏文件夹,里面包含着仅适用于当前目录的VSCode的设置,工作空间的设置会覆盖用户的设置。更改默认用户设置与工作空间设置VSCode的设置...

Python之路

Python之路引子与其感慨路难行,不如马上出发PythonPython之路(一):初识Python之路(二):基本数据类型(上)Python之路(三):基本数据类型(下)Python之路(四):函数介绍及使用Python之路(五):内置函数Python之路(六):迭代器,装饰器,生成器Python之路(七):字符串处理Python之路(八):基础模块(一)...

Matlab自定义函数的五种方法 [转]

子函数lfg2只能被主函数和主函数中的其他子函数调用。特点是,它是基于Matlab的数值运算内核的,所以它的运算速度较快,程序效率更高。...

NFC应用于公交卡

由于历史遗留,NFC的兼容性实在太差。一个完备的NFC产品,应该包括三个部分:NFC硬件、统一的系统接口支持、App。这种情况下,手机NFC相当于公交公司的读卡和写卡器。...

TCP UDP (转)

在互联网的早期,NCP协议用于主机之间的互连。该协议本身存在许多缺陷,例如:无法互连不同的主机,无法互连不同操作系统,并且没有纠错功能。为了改善这个缺点,Daniel提出了TCP/IP协议。现在几乎所有的操作系统都实现了TCP/IP协议栈。TCP/IP协议栈主要分为四层:应用层、传输层、网络层和数据链路层。每个层都有相应的协议。如下图所示,所谓的协议是双方之...