今天很荣幸又破解一现实难题:自动生成并导出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("\n\nSK个人项目\n申\t请\t书\n\n\n\n",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("\n\n"+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

完成!

自动生成并导出word文档的更多相关文章

  1. NPOI插件生成导出word文档

    因为之前没有接触NPOI过这个插件,所以几乎都是自己一边百度摸索一边学习. 这个插件对于Excel的数据导入和导出,可以说是很方便了, 但是对于导出word文档,可以说是很少的,百度了很多....也不 ...

  2. PHP网页导出Word文档的方法分离

    今天要探讨的是PHP网页导出Word文档的方法,使用其他语言的朋友也可以参考,因为原理是差不多的. 原理 一般,有2种方法可以导出doc文档,一种是使用com,并且作为php的一个扩展库安装到服务器上 ...

  3. powerdesigner连接postgresql数据库生成pdm及word文档

    1.准备软件: powerdesigner165与postgresql的驱动:psqlodbc_11_01_0000 2.安装并破解完成powerdesigner165 参看链接:https://ww ...

  4. .NET通过调用Office组件导出Word文档

    .NET通过调用Office组件导出Word文档 最近做项目需要实现一个客户端下载word表格的功能,该功能是用户点击"下载表格",服务端将该用户的数据查询出来并生成数据到Word ...

  5. C# 导出word文档及批量导出word文档(4)

          接下来是批量导出word文档和批量打印word文件,批量导出word文档和批量打印word文件的思路差不多,只是批量打印不用打包压缩文件,而是把所有文件合成一个word,然后通过js来调用 ...

  6. 【工具篇】利用DBExportDoc V1.0 For MySQL自动生成数据库表结构文档

    对于DBA或开发来说,如何规范化你的数据库表结构文档是灰常之重要的一件事情.但是当你的库,你的表排山倒海滴多的时候,你就会很头疼了. 推荐一款工具DBExportDoc V1.0 For MySQL( ...

  7. Java 用Freemarker完美导出word文档(带图片)

    Java  用Freemarker完美导出word文档(带图片) 前言 最近在项目中,因客户要求,将页面内容(如合同协议)导出成word,在网上翻了好多,感觉太乱了,不过最后还是较好解决了这个问题. ...

  8. poi根据模板导出word文档

    POI结构与常用类 Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. .NET的开发人员则可以利用NPOI ...

  9. 【Java】用Freemarker完美导出word文档(带图片)

    Java  用Freemarker完美导出word文档(带图片) 前言 最近在项目中,因客户要求,将页面内容(如合同协议)导出成word,在网上翻了好多,感觉太乱了,不过最后还是较好解决了这个问题. ...

随机推荐

  1. groovy学习(一)列表

    numbers = [11, 12, 13, 14]println(numbers[0])println(numbers[3])println(numbers[-1])//最左边的元素println( ...

  2. C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(上)

    译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(上)),不对的地方欢迎指出与交流. 章节出自<Professional C# ...

  3. python爬虫利器Selenium使用详解

    简介: 用pyhon爬取动态页面时普通的urllib2无法实现,例如下面的京东首页,随着滚动条的下拉会加载新的内容,而urllib2就无法抓取这些内容,此时就需要今天的主角selenium. Sele ...

  4. ABP Zero 单部署,单数据库,多租户架构

    首先,我们应该定义多租户系统中的两个条目: 租主(Host):租主是单例的(只有一个租主).租主会对创建和管理租户负责.因此,一个“租主用户”比所有的租户等级更高,并独立于所有租户,同时还能控制他们. ...

  5. YUM 安装及清理

    Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理 ...

  6. 每天一个linux命令(32)--/etc/group文件详解

    Linux /etc/group 文件与 /etc/passwd 和/etc/shadow 文件都是有关于系统管理员对用户和用户组管理时相关的文件.Linux /etc/group 文件是有关于系统管 ...

  7. 应用控制台应用程序开发批量导入EXEL程序。

    一.最近一直在调整去年以及维护去年开发的项目,好久没有在进行个人的博客了.每天抽了一定的时间在研究一些开源的框架,Drapper 以及NHibernate以及当前比较流行的SqlSuper框架 并进行 ...

  8. Yii 2.0 ActiveForm生成表单 ,控制表单label和filed样式,filed一旦报错,前面lable颜色跟着变,看图,帮你解决

    需要生成如下图的表单样式,图一:

  9. jquery 的基础知识,以及和Javascript的区别

    想到之前所学的javascript 我们会想到这几个方面:找元素: 操作内容: 操作属性:操作样式:统一操作元素: jquery 也是从这几个方面来学习的. <head> <meta ...

  10. 香港多IP站群服务器-搭建多IP代理服务器、游戏加速服务器

    耀磊花楹qq82521463香港WK自营机房多IP服务器租用,多IP站群服务器,多IP多C段 站群服务器租用 耀磊数据拥有3万个自由香港IP以及独立AS号,是APNIC核心成员,机房通过BGP融合 多 ...