• 自动生成并导出word文档


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

    先看页面效果:

                          页面下载效果

    word效果:

                                                 

                                                  

    代码:

    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部分:

         

    package qh.sk.action;
    
    import java.awt.Color;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.UnsupportedEncodingException;
    import java.util.HashMap;
    import java.util.List;
    import java.util.UUID;
    
    import org.apache.struts2.ServletActionContext;
    import org.framework.util.DateUtil;
    import org.framework.util.FileUtil;
    
    import com.lowagie.text.BadElementException;
    import com.lowagie.text.Cell;
    import com.lowagie.text.Document;
    import com.lowagie.text.DocumentException;
    import com.lowagie.text.Element;
    import com.lowagie.text.Font;
    import com.lowagie.text.PageSize;
    import com.lowagie.text.Paragraph;
    import com.lowagie.text.Table;
    import com.lowagie.text.pdf.BaseFont;
    import com.lowagie.text.rtf.RtfWriter2;
    import com.lowagie.text.rtf.style.RtfFont;
    import com.opensymphony.xwork2.ActionSupport;
    
    @SuppressWarnings("serial")
    public class UserAction extends ActionSupport{
    
        private String fileName;
        private InputStream inputStream;
        public String getFileName() {
            try {
                String filename = new String(this.fileName.getBytes("GBK"),"ISO8859-1");
                return filename;
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
                return "code";
            }    
        }
        public void setFileName(String fileName) {
            this.fileName = fileName;
        }
    
        public InputStream getInputStream() {
            return inputStream;
        }
        public void setInputStream(InputStream inputStream) {
            this.inputStream = inputStream;
        }
        public String test() throws DocumentException, IOException{
            String tempFolder = ServletActionContext.getServletContext().getRealPath("/temp/"+UUID.randomUUID());
            FileUtil.newFolder(tempFolder);
            String doc_outlearn=tempFolder+"/temp.doc";
            File file =null;
            try {
                file = new File(doc_outlearn);
                Document document = new Document(PageSize.A4, 50, 50, 50, 50); 
                RtfWriter2.getInstance(document, new FileOutputStream(file)); 
                document.open(); 
                exportWords(document);
                document.close(); 
                this.setFileName("SK1995.doc");
                this.inputStream =new java.io.FileInputStream(doc_outlearn);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            finally {
                file.deleteOnExit();
            }
            return "exportFile";
        }
        
        public void exportWords(Document document) throws DocumentException, 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) throws BadElementException
        {
             Cell cell=new Cell();
             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= new Paragraph(value, contextFont);
             label.setSpacingBefore(spacing);
             label.setSpacingAfter(spacing);
             cell.addElement(label);
             return cell;
        }
        public Cell fillCellWithBottomBorder(String value, RtfFont contextFont,int align,int spacing,int colspans,int rowspan) throws BadElementException
        {
             Cell cell=new Cell();
             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= new Paragraph(value, contextFont);
             label.setSpacingBefore(spacing);
             label.setSpacingAfter(spacing);
             cell.addElement(label);
             return cell;
        }
        public Cell fillCell(String value, RtfFont contextFont,int align,int spacing,int colspans) throws BadElementException
        {
             Cell cell=new Cell();
             cell.setHorizontalAlignment(align);
             cell.setVerticalAlignment(Element.ALIGN_MIDDLE); 
             if (colspans>0)
             {
                 cell.setColspan(colspans);
             }
             Paragraph label= new Paragraph(value, contextFont);
             label.setSpacingBefore(spacing);
             label.setSpacingAfter(spacing);
             cell.addElement(label);
             return cell;
        }
        public Cell fillCell(String value, RtfFont contextFont,int align,int spacing,int colspans,int rowspan) throws BadElementException
        {
             Cell cell=new Cell();
             cell.setHorizontalAlignment(align);
             cell.setVerticalAlignment(Element.ALIGN_MIDDLE); 
             if (colspans>0)
             {
                 cell.setColspan(colspans);
             }
             if (rowspan>0)
             {
                 cell.setRowspan(rowspan);
             }
             Paragraph label= new Paragraph(value, contextFont);
             label.setSpacingBefore(spacing);
             label.setSpacingAfter(spacing);
             cell.addElement(label);
             return cell;
        }
        public Paragraph setParagraphStyle(Font font , float firstLineIndent , float leading , float indentationRight , int alignment, int spacing)
        {  
            Paragraph _paragraph = new Paragraph();  
            _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

    完成!

                                 

  • 相关阅读:
    [LeetCode] 117. Populating Next Right Pointers in Each Node II
    [LeetCode] 229. Majority Element II
    [LeetCode] 876. Middle of the Linked List
    HttpClient 使用案例
    github 拷贝项目到本地
    tomcat下文件路径
    同一个tomcat 两个项目 互相访问接口方法
    Mysq 列中存储json格式根据key取value
    mysql 函数和存储过程的区别
    mysql触发器
  • 原文地址:https://www.cnblogs.com/SK1995/p/5569623.html
Copyright © 2020-2023  润新知