通过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 );
http://blog.csdn.net/hai200501019/article/details/42900905
http://blog.csdn.net/hai200501019/article/details/42923865
通过xml生成word文档的更多相关文章
- velocity模板技术生成word文档
本文介绍採用velocity技术在Java中生成word文档的方法. 1.新建一个word文档,编辑内容例如以下: 2.将上述word文档另存为htm格式的文件 3.新建一个Java Project项 ...
- 将HTML导出生成word文档
前言: 项目开发中遇到了需要将HTML页面的内容导出为一个word文档,所以有了这边随笔. 当然,项目开发又时间有点紧迫,第一时间想到的是用插件,所以百度了下.下面就介绍两个导出word文档的方法. ...
- POI生成word文档完整案例及讲解
一,网上的API讲解 其实POI的生成Word文档的规则就是先把获取到的数据转成xml格式的数据,然后通过xpath解析表单式的应用取值,判断等等,然后在把取到的值放到word文档中,最后在输出来. ...
- PoiDocxDemo【Android将表单数据生成Word文档的方案之二(基于Poi4.0.0),目前只能java生成】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这个是<PoiDemo[Android将表单数据生成Word文档的方案之二(基于Poi4.0.0)]>的扩展,上一篇是根 ...
- PoiDemo【Android将表单数据生成Word文档的方案之二(基于Poi4.0.0)】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 使用Poi实现android中根据模板文件生成Word文档的功能.这里的模板文件是doc文件.如果模板文件是docx文件的话,请阅读 ...
- FreemarkerJavaDemo【Android将表单数据生成Word文档的方案之一(基于freemarker2.3.28,只能java生成)】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这个方案只能在java中运行,无法在Android项目中运行.所以此方案是:APP将表单数据发送给后台,后台通过freemarker ...
- 使用freemarker模板引擎生成word文档的开发步骤
1.准备模板文档,如果word文档中有表格,只保留表头和第一行数据:2.定义变量,将word文档中的变量用${var_name}替换:3.生成xml文件,将替换变量符后的word文档另存为xml文件: ...
- 使用FreeMarker生成word文档
生成word文档的框架比较多,比如poi,java2word,itext和freemarker. 调研之后,freemarker来实现挺简单的,具体步骤如下: 1. 新建word文档,占位符用${}, ...
- FreeMarker生成Word文档
FreeMarker简介: FreeMarker是一款模板引擎:即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具,它不是面向最终用户的,而是一个 ...
随机推荐
- java concurrency: daemon线程
daemon线程的概念 在学习操作系统概念的时候,我们就曾听说过daemon的概念.daemon本身指的是在后台运行的进程或者线程,一般用来提供某些不需要与用户直接交互的服务,有点像我们见到的一些系统 ...
- QQ对话代码
<li> <strong class="QQ">客服QQ</strong> <span> <a href="mqqw ...
- 深夜,用canvas画一个时钟
深夜,用canvas画一个时钟 查看demo 这几天准备阿里巴巴的笔试,可以说已经是心力交瘁,自从阿里和蘑菇街的内推被刷掉之后,开始越来越怀疑起自己的能力来,虽然这点打击应该是微不足道的.毕竟校招在刚 ...
- (IOS)多线程开发
一.线程的使用 以向网络请求一张图片为例 -(void)downURL:(NSURL *)aURL { NSData *d = [NSData dataWithContentsOfURL:aURL]; ...
- 「操作系统」:Linker Use static Libraries
While static libraries are useful and essential tools, they are also a source of confusion to progra ...
- 数据结构——二叉搜索树(Binary Search Tree)
二叉树(Binary Tree)的基础下 每个父节点下 左节点小,右节点大. 节点的插入: 若root==NULL则root=newnode 否则不断与节点值比较,较小则向左比较,较大则向右比较. 完 ...
- Python基础 3----文件和网络
1 Python文件IO 1 标转的输入和输出 print 方法:输出数据到标准的输出 raw_input 方法:标准的输入 2 file文件类 读文件 f = file(文件名, 模式) 有5种模式 ...
- 同时支持多家云平台的管理工具HybridFox
偶然间发现了这个firefox上的开元插件 号称支持AWS,Eucalyptus,OpenStack,OpenNebula 目的是通过一个入口实现异种云平台的管理 主要功能包括: Manage Ima ...
- IBATIS动态SQL
转自:http://www.cnblogs.com/phoebus0501/archive/2011/05/16/2048126.html 直接使用JDBC一个非常普遍的问题就是动态SQL.使用参数值 ...
- asp.net中MVC多语言包的使用
Global.asax.cs文件 protected void Application_AcquireRequestState(object sender, EventArgs e) { if (Ht ...