zoukankan      html  css  js  c++  java
  • 通过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","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

  • 相关阅读:
    【Node】fs
    ☀【滚动条】动画,固定
    洛谷——P3817 小A的糖果
    洛谷——P1316 丢瓶盖
    洛谷—— P1190 接水问题
    CODEVS——T1332 上白泽慧音 || 洛谷——P1726 上白泽慧音
    CODEVS——T3008 加工生产调度
    python(20)- 列表生成式和生成器表达式练习Ⅱ
    MTK Android 编译命令
    第六届深圳国际物联网和智慧中国博览会(2014)总结
  • 原文地址:https://www.cnblogs.com/findumars/p/5176075.html
Copyright © 2011-2022 走看看