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

word效果:


代码:
- 先搭建struts2项目
- 创建action,并在struts.xml完成注册
<?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文档的更多相关文章
- NPOI插件生成导出word文档
因为之前没有接触NPOI过这个插件,所以几乎都是自己一边百度摸索一边学习. 这个插件对于Excel的数据导入和导出,可以说是很方便了, 但是对于导出word文档,可以说是很少的,百度了很多....也不 ...
- PHP网页导出Word文档的方法分离
今天要探讨的是PHP网页导出Word文档的方法,使用其他语言的朋友也可以参考,因为原理是差不多的. 原理 一般,有2种方法可以导出doc文档,一种是使用com,并且作为php的一个扩展库安装到服务器上 ...
- powerdesigner连接postgresql数据库生成pdm及word文档
1.准备软件: powerdesigner165与postgresql的驱动:psqlodbc_11_01_0000 2.安装并破解完成powerdesigner165 参看链接:https://ww ...
- .NET通过调用Office组件导出Word文档
.NET通过调用Office组件导出Word文档 最近做项目需要实现一个客户端下载word表格的功能,该功能是用户点击"下载表格",服务端将该用户的数据查询出来并生成数据到Word ...
- C# 导出word文档及批量导出word文档(4)
接下来是批量导出word文档和批量打印word文件,批量导出word文档和批量打印word文件的思路差不多,只是批量打印不用打包压缩文件,而是把所有文件合成一个word,然后通过js来调用 ...
- 【工具篇】利用DBExportDoc V1.0 For MySQL自动生成数据库表结构文档
对于DBA或开发来说,如何规范化你的数据库表结构文档是灰常之重要的一件事情.但是当你的库,你的表排山倒海滴多的时候,你就会很头疼了. 推荐一款工具DBExportDoc V1.0 For MySQL( ...
- Java 用Freemarker完美导出word文档(带图片)
Java 用Freemarker完美导出word文档(带图片) 前言 最近在项目中,因客户要求,将页面内容(如合同协议)导出成word,在网上翻了好多,感觉太乱了,不过最后还是较好解决了这个问题. ...
- poi根据模板导出word文档
POI结构与常用类 Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. .NET的开发人员则可以利用NPOI ...
- 【Java】用Freemarker完美导出word文档(带图片)
Java 用Freemarker完美导出word文档(带图片) 前言 最近在项目中,因客户要求,将页面内容(如合同协议)导出成word,在网上翻了好多,感觉太乱了,不过最后还是较好解决了这个问题. ...
随机推荐
- WP8.1开发中关于如何显示.gif格式动态格式图片方法
这几天又遇到个问题,就是如何显示动态图片,本来以为和显示静态图片一样,谁知不行,在网上一查才知道WP8.1不支持.gif格式动态图片的显示: 后来又在MSDN论坛上查找,也有人问类似的问题,后来就大概 ...
- c++类的构造函数详解
c++类的构造函数详解 一. 构造函数是干什么的 class Counter{ public: // 类Counter的构造函数 // 特点:以类名作为函数名,无返回类 ...
- 详解JavaScript闭包
要想完全明白JavaScript的闭包,要先明白js中的一些基础原理,然后我再给出一些例子来讲解闭包. 在执行JavaScript时会创建一个执行环境(excution context),执行环境定义 ...
- NFS安装及配置
NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布.功能是通过网络让不同的机器.不同的操作系统能够彼此分享个 ...
- angular router ui bug !
https://github.com/angular-ui/ui-router/issues/600 https://github.com/angular-ui/ui-router/issues/22 ...
- H5缓存-Manifest
在app中更新h5页面一直有缓存问题.默认什么都不做的情况下,app有一定的空间缓存页面.一开始更新之后会马上加载,等到app缓存空间上来之后更新就无法下载了.安卓能够清理缓存空间,ios就只能卸载重 ...
- 第34篇 再谈http协议
从打开一个网址说起 当在浏览器中输入一个网址的时候,浏览器会渲染出对应的网页的内容.作为web开发人员来说,应该知道这个过程: 当输入的一个网址为域名的时候,浏览器则根据本机的网关和DNS服务器来解析 ...
- ERP实施员的保密要求
一.公司机密文件范围 1 公司级计算机密码 2 公司级程序软件 3 与客户联系的各种远程联系用户名,密码 4 公司发展计划.规划 5 公司客户资料.财务报表.人事薪资.报 ...
- SpringCache缓存初探
body,table tr { background-color: #fff } table tr td,table tr th { border: 1px solid #ccc; text-alig ...
- Hadoop伪分布安装配置
安装环境: 系统:Ubuntu 14.10 64bit hadoop:2.5.1 jdk:1.8.0_11 安装步骤: 一.安装JDK 安装 jdk,并且配置环境以及设置成默认 sudo gedi ...