通过xml生成word文档

Xml生成word总结

使用xml生成word的基本步骤在《使用xslt转化xml数据形成word文档导出.doc》中说明比较清楚了。但是其中的细节并未说到,因此自己折腾了两天总算成功了。以下是我在使用过程中碰到的问题要点:

必须使用word 2003.

1.下面通过例子演示:

简单 的xml以及对应的xml框架

2.分别创建03版本的word文档log_03.doc和o7版本的word文档log_07.docx,并都应用以上生成的log.xsd框架

分别另存为log_03_doc.xml,log_07_doc.xml。

3. 用log_03_doc.xml,log_07_doc.xml生成xslt文件log_03.xslt和log_07.xslt。

log_03_doc.xml生成log_03.xslt时会弹出以上对话框,仅仅选中xml中指定的namespace就可以了。

log_07_doc.xml生成log_07.xslt时会弹出以上对话框,就是没有xml中指定的namespace,所有无论怎么选,生成的xslt都不是我们想要的。

不要选其他namespace

log_03_doc.xml生成log_03.xslt时会弹出以上对话框,不要随便再选其他namespace。 生成的xslt截图

如果再选中其他namespace,生成的xslt也不是我们要的。生成xslt截图

显然跟上面的不一样。

插入图片

要实现插入图片,需要修改log_03.doc.

重新生成log_03.xslt,并修改<ns0:image>节点。

1、删除整个v:shapetype 节点

2、删除  <w:binData节点中的数据,并添加<xsl:value-ofselect="."/>

修改之后

3、修改v:shape 节点,去掉 style 属性,增加xsl 节点,如下:

4、去掉w:pict 节点后面的带<xsl:value-ofselect="."/>的所有节点

例子中去掉了如下代码:

<w:r>

<w:t>

<xsl:value-of select="." />

</w:t>

</w:r>

如果没做第四步,则在word中会出现图片的二进制代码。

例子:

QDomDocumentdom;

QDomProcessingInstructionproc =

dom.createProcessingInstruction(

"xml",

"version=\"1.0\"standalone=\"no\""

);

dom.appendChild(proc);

QDomElementr =dom.createElement("log");

dom.appendChild(r);

r.setAttribute("xmlns","logs");

QDomElementuserNode =dom.createElement("user");

r.appendChild(userNode);

QDomTextuserTextNode =dom.createTextNode("john");

userNode.appendChild(userTextNode);

QDomElementloginNode =dom.createElement("login");

r.appendChild(loginNode);

QDomTextloginTextNode =dom.createTextNode("2015-01-1811:10:12");

loginNode.appendChild(loginTextNode);

QDomElementlogoffNode =dom.createElement("logoff");

r.appendChild(logoffNode);

QDomTextlogoffTextNode =dom.createTextNode("2015-01-1813:10:12");

logoffNode.appendChild(logoffTextNode);

QDomElementimageNode =dom.createElement("image");

r.appendChild(imageNode);

QStringpng;

FILE*fpng =fopen("2.jpg","rb");

if(
fpng )

{

encode(fpng,png,0 );

fclose(fpng );

}

imageNode.setAttribute("style","width:300pt;height:300pt" );

charszBuffer[256];

//sprintf(szBuffer,"wordml://5.png");

imageNode.setAttribute("key","2.jpg" );

QDomTextlogonNodeTextNode =dom.createTextNode(png);

imageNode.appendChild(logonNodeTextNode);

QStringxml =dom.toString();

QFilefile("log.xml");

if(file.open(QIODevice::WriteOnly))

{

QTextStreamoutput( &file);

output.setCodec(QTextCodec::codecForName("UTF-8"));

//QStringcontent = dom.toString();

output<<
xml;

file.close();

}

QStringsrc ="msxsl.exe";

QStringsrc1 ="log.xml";

QStringsrc2 ="log_03.xslt";

QStringsrc3 =QString("122")+".doc";

QProcess*proce =newQProcess( );

QStringListargumentList;

argumentList.append(src1 );

argumentList.append(src2 );

argumentList.append("-o");

argumentList.append(src3 );

proce->start(src,
argumentList );

bool ret =proce->waitForStarted( 5000 );

时间: 2024-11-09 03:56:44

通过xml生成word文档的相关文章

velocity模板技术生成word文档

本文介绍采用velocity技术在Java中生成word文档的方法. 1.新建一个word文档,编辑内容如下: 2.将上述word文档另存为htm格式的文件 3.新建一个Java Project项目velocityTest,加入Velocity所依赖的Jar包velocity-dep-1.5-beta2.jar. 4.在src目录下新建一个velocity.vm文件,将第二步生成的velocity.htm用文本编辑器打开,复制内容到velocity.vm中.内容如下: <html xmlns:v

POI加dom4j将数据库的数据按一定格式生成word文档

一:需求:将从数据库查处来的数据,生成word文档,并有固定的格式.(dom4j的jar包+poi的jar包) 二:解决:(1)先建立固定格式的word文档(2007版本以上),另存成为xml文件,作为模板.(修改xml节点,添加属性,用于标示要填固定数据的节点) (2)dom4j解析模板xml文件,将文件读入内存,并把数据库数据写入内存的xml模型中 (3)利用poi将内存中的含有数据库内容的xml模型转换成word内存模型,利用输出流输出word文档 三:DEMO [1]模板的word文档

freemarker+Jfreechart生成Word文档(含图片)

这几天再弄一个报表,要统计一些信息最终的部分展示结果如下: 基本工具freemarker,jfreechart 工程的部分结构如下 与生成Word有关的类主要有FreemarkerConfiguration和WordGenerator代码如下: import com.bqs.ares.common.utils.CommonUtils; import freemarker.template.Configuration; import java.io.File; import org.slf4j.L

Java Web项目中使用Freemarker生成Word文档

Web项目中生成Word文档的操作屡见不鲜,基于Java的解决方案也是很多的,包括使用Jacob.Apache POI.Java2Word.iText等各种方式,其实在从Office 2003开始,就可以将Office文档转换成XML文件,这样只要将需要填入的内容放上${}占位符,就可以使用像Freemarker这样的模板引擎将出现占位符的地方替换成真实数据,这种方式较之其他的方案要更为简单. 下面举一个简单的例子,比如在Web页面中填写个人简历,然后点击保存下载到本地,效果图如下所示. 打开下

freemarker生成word文档

利用freemarker生成word文档步骤: 导入jar包:freemarker-2.3.20.jar 新建word模板,调整好样式, word模板另存为2003 xml格式, xml中需要替换的内容用${param}替换,param为参数名称,例如:${name } ,传入参数map.put("name","张三"); 编写java代码,替换xml文档,导出. 1 /** 2 *@文件名称: CreateWord.java 3 *@日期: 2016-5-19 4

使用模板生成word文档

使用poi-tl根据模板生成word文档,在porm.xml中添加poi-tl依赖,直接上代码 import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.Map; import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.render.RenderAPI; import com.thinkge

java使用freemarker 生成word文档

java 生成word文档 最近需要做一个导出word的功能, 在网上搜了下, 有用POI,JXL,iText等jar生成一个word文件然后将数据写到该文件中,API非常繁琐而且拼出来的样式也不美观,于是选择了另一种方式----feemarker基于word模板的导出方式, 这种方式非常简单而且导出的样式美观, 其原理就是先做一个word模板, 该模板中变量数据用${xxx}这种方式填写, 然后再导出时只需读取模板然后用相应的数据替换其中的${xxx}即可. 一,简单模板导出(不含图片, 不含

java通过freemarket生成word文档

1.使用freemarker的原因是:由于POI和ITEXT在处理复杂word文档格式时欠缺,尤其在生成WORD文档时,(其他处理word的工具需要动态加载windows动态链接库,有些还要收费),并且需求要在WORD指定位置插入图片,所以在参考了POI和ITEXT官网处理WORD和网络上其他处理WORD的工具后,发现freemarker可以通过设定WORD模板,经过处理生成ftl文件后,可直接通过freemarker的工具jar包可以生成指定位置的WORD文件.(不过用模板生成有个别缺点,一是

从数据库中取出数据,使用freemarker生成word文档

这个星期做数据字典功能,有一项任务就是将数据库中的每个表的字段导出,生成word文档,在综合比较网上各种技术之后,参照csdn上骆豪的博客完成了任务. 骆昊的链接:http://blog.csdn.net/jackfrued/article/details/39449021 首先打开word文档,建立自己所需要的模板,然后将word保存为XML的格式,这里可能出现的一个问题就是需要填入的内容放上${}占位符的时候可能会出现字符分离的情况,所以建议先将需要用${}占位符的地方用中文写在word里然