1.最近忙于锻炼身体,好久不写文章了,简单写一个导出word的例子,很多管理系统中会有一个常用的功能就是导出word文件,excel文件,pdf文件等,不必多说,好处您懂的。
直接上代码了,不写文字描述了。
public class UserAction extends ActionSupport {
private User user;//省略get和set
/**
* 导出word
*/
public void exportObj() {
if (null != pkId && pkId.trim().length() > 0) {
user = this.userService.getById(User.class,pkId);
}
Configuration configuration = new Configuration();
configuration.setDefaultEncoding("utf-8");
Map data = new HashMap();
data.put("user", this.getUser());
configuration.setClassForTemplateLoading(getClass(),
"/com/test/yale/template");
Template t = null;
try {
t = configuration.getTemplate("user.ftl");//载入模版文件(把要导出的word模版另存为word xml就可以了)
t.setEncoding("utf-8");
} catch (IOException e) {
e.printStackTrace();
}
String fileName = "人员确认书.doc";
//人员头像导出
if(null!=this.getUser().getPhoto()){
try {
String address = ServletActionContext.getServletContext()
.getRealPath("/");
String dir = address + "images/orgseal/"
+ this.getUser().getPhoto();//获得图片位置包括图片全名
String image = getImageBase64Data(dir);//把图片转换成BASE64形式
if (image == null) {
data.put("photo","无头像");
} else {
data.put("photo", image);
}
} catch (Exception e) {
data.put("stuphoto", "无头像");
}
}
ActionContext ctx = ActionContext.getContext();
HttpServletResponse response = (HttpServletResponse) ctx
.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse");
response.setContentType("application/msword");
try {
response.addHeader("Content-Disposition", "attachment; filename="
+ URLEncoder.encode(fileName, "UTF-8"));
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
t.process(data, out);
out.close();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (TemplateException e) {
e.printStackTrace();
}
}
}
下面看图片转换BASE64方法:
/**
* 获得图片64位编码数据
* @param imgSrc
* @return
*/
private String getImageBase64Data(String imgSrc){
InputStream in =null;
byte[] data = null;
try{
in = new FileInputStream(imgSrc);
data = new byte[in.available()];
in.read(data);
in.close();
}catch(IOException ex){
ex.printStackTrace();
}
Base64EncoderNew encoder = new Base64EncoderNew();
return encoder.encode(data);
}
其中Base64EncoderNew 在网上可以找到 是重写sun 的
public class Base64EncoderNew {
private static char[] codec_table = { 'A', 'B', 'C', 'D', 'E', 'F', 'G',
'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6',
'7', '8', '9', '+', '/' };
public Base64EncoderNew() {
}
public String encode(byte[] a) {
int totalBits = a.length * 8;
int nn = totalBits % 6;
int curPos = 0;// process bits
StringBuffer toReturn = new StringBuffer();
while (curPos < totalBits) {
int bytePos = curPos / 8;
switch (curPos % 8) {
case 0:
toReturn.append(codec_table[(a[bytePos] & 0xfc) >> 2]);
break;
case 2:
toReturn.append(codec_table[(a[bytePos] & 0x3f)]);
break;
case 4:
if (bytePos == a.length - 1) {
toReturn
.append(codec_table[((a[bytePos] & 0x0f) << 2) & 0x3f]);
} else { int pos = (((a[bytePos] & 0x0f) << 2) | ((a[bytePos + 1] & 0xc0) >> 6)) & 0x3f;
toReturn.append(codec_table[pos]);
}
break;
case 6:
if (bytePos == a.length - 1) {
toReturn
.append(codec_table[((a[bytePos] & 0x03) << 4) & 0x3f]);
} else {
int pos = (((a[bytePos] & 0x03) << 4) | ((a[bytePos + 1] & 0xf0) >> 4)) & 0x3f;
toReturn.append(codec_table[pos]);
}
break;
default:
//never hanppen
break;
}
curPos+=6;
}
if(nn==2)
{
toReturn.append("==");
}
else if(nn==4)
{
toReturn.append("=");
}
return toReturn.toString();
}
}
use.ftl 主要内容
<#--定义变量 赋值-->
<#assign euserdata={}/>
<#assign img={}/>
<#if user??>
<#assign userdata=user/>
</#if>
<#if photo??>
<#assign img=photo/>
</#if>
<#--显示数据-->
用户名:${userdata.userName!''}
注册时间:${userdata.regDate?string('yyyy-MM-dd')}
用户头像:
<w:pict>
<v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">
<v:stroke joinstyle="miter"/>
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0"/>
<v:f eqn="sum @0 1 0"/>
<v:f eqn="sum 0 0 @1"/>
<v:f eqn="prod @2 1 2"/>
<v:f eqn="prod @3 21600 pixelWidth"/>
<v:f eqn="prod @3 21600 pixelHeight"/>
<v:f eqn="sum @0 0 1"/>
<v:f eqn="prod @6 1 2"/>
<v:f eqn="prod @7 21600 pixelWidth"/>
<v:f eqn="sum @8 21600 0"/>
<v:f eqn="prod @7 21600 pixelHeight"/>
<v:f eqn="sum @10 21600 0"/>
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
<o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype>
<w:binData w:name="wordml://03000001.png" xml:space="preserve">${img}</w:binData>
<v:shape id="_x0000_i1025" type="#_x0000_t75" style="width:68.25pt;height:62.25pt">
<v:imagedata src="wordml://03000001.png" o:title="seal"/>
</v:shape>
</w:pict>
简单说这些吧,对了,还有一个重点,就是word模版另存为xml的时候,记得用office2003,要不然图片无法显示,07的word xml格式有改动!!!!
分享到:
相关推荐
Freemarker是一个强大的模板引擎,常用于Web应用中的视图层渲染,比如JavaEE的Struts2、Spring MVC等框架。它允许开发者使用简单的模板语言来分离业务逻辑和视图展示,使得页面设计更为灵活。在本案例中,我们将探讨...
9. **插件Plugin**:Struts2有众多插件支持,如Tiles插件用于页面布局,Freemarker或Velocity插件作为视图模板引擎,以及Spring插件整合Spring框架等。 10. **AJAX支持**:Struts2提供了一套基于JSON的Ajax支持,...
第四章可能涉及Struts2的视图技术,如JSP标签库的使用,以及如何与FreeMarker、Velocity等模板引擎集成,以创建动态HTML页面。第五章可能涵盖Struts2的模型部分,包括数据持久化、DAO设计模式以及与ORM框架(如...
在Web应用中,如果需要将动态数据导出为Word报告,可以利用Freemarker和Apache POI的组合,Freemarker生成模板,Apache POI将模板转换为Word文档。 结合这三个技术,我们可以构建一个系统,用户在前端进行某些操作...
Struts2是一个强大的Java web应用程序框架,它基于MVC(Model-View-Controller)设计模式,主要用于构建可维护性高、结构清晰的企业级应用。在实际项目中,数据可视化是必不可少的一部分,饼状图形报表就是一种常用...
`freemarker-2.3.8.jar` 是一个基于Java的开源模板引擎,主要用于生成动态HTML、XML、PDF、...同时,对于大型项目,还需要考虑与其他技术(如Spring MVC、Struts2等)的集成,以及模板的管理、调试和性能优化等问题。
SSH框架是Java开发中常用的三大框架整合,包括Struts2、Spring和Hibernate。这个压缩包提供的是一套完整的、经过测试可用的SSH框架依赖包,适用于构建基于Java的企业级Web应用程序。 1. **Struts2**: Struts2是MVC...
ooxml-schemas-3.11-20141221.jar`、`poi-3.11-20141221.jar`、`poi-ooxml-3.11-20141221.jar`这些文件与Apache POI库相关,主要用于读写Microsoft Office格式的文件,如Excel、Word等,它们在报表生成、数据导出等...
它结合了Model2架构和Action Servlet,提供了拦截器机制,支持多种视图技术如JSP、FreeMarker等,增强了Web应用的可扩展性和灵活性。 3. **Apache POI**: poi-3.0.1-FINAL-20070705.jar 和 poi-scratchpad-3.0.1-...
JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
5. 报表整合:JEECG集成了Excel简易导出工具和Highcharts图形报表,方便开发者快速生成各种报表,包括PDF、Excel和Word格式。 6. 工作流设计器:JEECG集成了jbpm工作流设计器,允许开发者在页面配置流程转向,从而...
JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...