zoukankan      html  css  js  c++  java
  • 自动生成并导出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

    完成!

                                 

  • 相关阅读:
    BZOJ 1391: [Ceoi2008]order
    BZOJ 4504: K个串
    2019 年百度之星·程序设计大赛
    POJ 2398 Toy Storage (二分 叉积)
    POJ 2318 TOYS (二分 叉积)
    HDU 6697 Closest Pair of Segments (计算几何 暴力)
    HDU 6695 Welcome Party (贪心)
    HDU 6693 Valentine's Day (概率)
    HDU 6590 Code (判断凸包相交)
    POJ 3805 Separate Points (判断凸包相交)
  • 原文地址:https://www.cnblogs.com/SK1995/p/5569623.html
Copyright © 2011-2022 走看看