码迷,mamicode.com
首页 > 其他好文 > 详细

通过xml生成word文档

时间:2015-01-20 06:35:58      阅读:150      评论:0      收藏:0      [点我收藏+]

标签: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 );

 技术分享

通过xml生成word文档

标签:xml   word   

原文地址:http://blog.csdn.net/hai200501019/article/details/42900905

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!