java如何将xml类型的word文档转换为word类型的文档
我的需求是这样的:
word文档类型是xml,用文本编辑器打开看到以下代码(我只拷贝了头部部分代码)
java如何能把它转换为word类型的doc文档,Apache的poi好像只能把word文档转换成xml、html等格式的,但不能反过来转。请问有没有解决过这种需求的朋友,先谢谢了!
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?mso-application progid="Word.Document"?>
<pkg:package xmlns:pkg="http://schemas.microsoft.com/office/2006/xmlPackage">
<pkg:part pkg:name="/_rels/.rels" pkg:contentType="application/vnd.openxmlformats-package.relationships+xml">
<pkg:xmlData>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="word/document.xml"/>
<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/>
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/>
<Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties" Target="docProps/custom.xml"/>
</Relationships>
</pkg:xmlData>
</pkg:part>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
大致的思路是先用office2003或者2007编辑好word的样式,然后另存为xml,将xml翻译为FreeMarker模板,最后用java来解析FreeMarker模板并输出Doc。经测试这样方式生成的word文档完全符合office标准,样式、内容控制非常便利,打印也不会变形,生成的文档和office中编辑文档完全一样。
用xml做导出方案。
先创建一个word文档,按照需求在word中填好一个模板,然后把对应的数据换成变量${},然后将文档保存为xml文档格式,使用文档编辑器打开这个xml格式的文档,去掉多余的xml符号,使用Freemarker读取这个文档然后替换掉变量,输出word文档即可
需要freemarker jar包
/**
*/
package com.wt.service.download;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.http.HttpServletResponse;
import net.paoding.rose.web.Invocation;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;
/**
*/
@Service
public class DownloadService {
// inv.getResponse().setContentLength((int)file.length());
}
package com.wt.common.util;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.Template;
/**
*/
public class WordUtil {
}
package com.wt.controllers.test1;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import net.paoding.rose.web.Invocation;
import net.paoding.rose.web.annotation.Path;
import net.paoding.rose.web.annotation.rest.Get;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import com.wt.common.util.CommonsUtil;
import com.wt.common.util.Constants;
import com.wt.common.util.ResponseObject;
import com.wt.common.util.WordUtil;
import com.wt.service.download.DownloadService;
/**
*/
@Path("/word")
public class WordController {
// private String fileName; //文件名称
}
@smilesnake 首先感谢分享代码,可能是我的问题,没有把问题描述清楚,我目前就是按照你的思路来做的,但问题是最后给用户生成的这个doc文档是xml类型的(另存为的时候能够看到)并且用户打开编辑后再去另存的时候就变成了xml为后缀的文档了,导致后面打不开,所以我的问题是如何能生成word类型的文档
这是freemarker生成word文档的通病,它本质上还是一个xml文本,可以看看:http://www.xdocin.com/office....,它的结果是真正的docx格式
楼主问题解决了吗 我也遇到这个问题 求教
楼主问题解决了吗 我也遇到这个问题 求教
我也遇到了这个问题,有什么好的解决办法吗?
楼主的问题解决了吗?我也遇到了这个问题,求大神教教!