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 );

http://blog.csdn.net/hai200501019/article/details/42900905

http://blog.csdn.net/hai200501019/article/details/42923865

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

  1. velocity模板技术生成word文档

    本文介绍採用velocity技术在Java中生成word文档的方法. 1.新建一个word文档,编辑内容例如以下: 2.将上述word文档另存为htm格式的文件 3.新建一个Java Project项 ...

  2. 将HTML导出生成word文档

    前言: 项目开发中遇到了需要将HTML页面的内容导出为一个word文档,所以有了这边随笔. 当然,项目开发又时间有点紧迫,第一时间想到的是用插件,所以百度了下.下面就介绍两个导出word文档的方法. ...

  3. POI生成word文档完整案例及讲解

    一,网上的API讲解 其实POI的生成Word文档的规则就是先把获取到的数据转成xml格式的数据,然后通过xpath解析表单式的应用取值,判断等等,然后在把取到的值放到word文档中,最后在输出来. ...

  4. PoiDocxDemo【Android将表单数据生成Word文档的方案之二(基于Poi4.0.0),目前只能java生成】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这个是<PoiDemo[Android将表单数据生成Word文档的方案之二(基于Poi4.0.0)]>的扩展,上一篇是根 ...

  5. PoiDemo【Android将表单数据生成Word文档的方案之二(基于Poi4.0.0)】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 使用Poi实现android中根据模板文件生成Word文档的功能.这里的模板文件是doc文件.如果模板文件是docx文件的话,请阅读 ...

  6. FreemarkerJavaDemo【Android将表单数据生成Word文档的方案之一(基于freemarker2.3.28,只能java生成)】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这个方案只能在java中运行,无法在Android项目中运行.所以此方案是:APP将表单数据发送给后台,后台通过freemarker ...

  7. 使用freemarker模板引擎生成word文档的开发步骤

    1.准备模板文档,如果word文档中有表格,只保留表头和第一行数据:2.定义变量,将word文档中的变量用${var_name}替换:3.生成xml文件,将替换变量符后的word文档另存为xml文件: ...

  8. 使用FreeMarker生成word文档

    生成word文档的框架比较多,比如poi,java2word,itext和freemarker. 调研之后,freemarker来实现挺简单的,具体步骤如下: 1. 新建word文档,占位符用${}, ...

  9. FreeMarker生成Word文档

    FreeMarker简介: FreeMarker是一款模板引擎:即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具,它不是面向最终用户的,而是一个 ...

随机推荐

  1. poj2486 Apple Tree【区间dp】

    转载请注明出处,谢谢:http://www.cnblogs.com/KirisameMarisa/p/4374766.html   ---by 墨染之樱花 [题目链接]http://poj.org/p ...

  2. poj2449 Remmarguts' Date【A*算法】

    转载请注明出处,谢谢:http://www.cnblogs.com/KirisameMarisa/p/4303855.html   ---by 墨染之樱花 [题目链接]:http://poj.org/ ...

  3. Ext JS学习第十三天 Ext基础之 Ext.Element

    •Ext.Element提供了181个方法,嗯,还没完,只是在4.1版本中是这样,最新的4.2版本貌似又增加了新方法,可谓是相当丰富给力.那么根据操作类型基本可以分为查询系.DOM操作系.样式操作系. ...

  4. asp.net个人笔记

    1.进程外session一记 配置进程外session, 在webconfig中配置<sessionState timeout="60" mode="StateSe ...

  5. [javascript]MooTools Selectors(MooTools 选择器) ELEMENT DOM选择

    //ELEMENT DOM选择//on are tag names. //All the divs on the page: $$('div'); //All the divs and paragra ...

  6. Zend Studio 如何配置本地apache服务器使用xdebug调试php脚本

    本地环境搭配: apache 2.2 安装位置:D:/program files/Apache Software Foundation/Apache2.2 php 5.2.10 安装位置:C:/php ...

  7. (Problem 47)Distinct primes factors

    The first two consecutive numbers to have two distinct prime factors are: 14 = 2  7 15 = 3  5 The fi ...

  8. 3,C语言文件读写

    这两天看到一个关于文件读写的题目,索性就把相关内容总结下. C语言文件读写,无非是几个读写函数的应用,fopen(),fread(),fwrite()等,下面简单介绍下. 一.fopen() 函数原型 ...

  9. 转: 用css把图片转为灰色图

    小tip: 使用CSS将图片转换成黑白(灰色.置灰) by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.co ...

  10. jsp小商城

    一个小商城,当然,没淘宝那么厉害,只是那时学完j2ee后,发现java原来也可以做网站,学了数据库,servlet,jsp,当时是很惊喜的,可以直接做个这样的东西.而放到今天,学了更多之后,发现可以用 ...