經過xml生成word文檔

Xml生成word總結

   使用xml生成word的基本步驟在《使用xslt轉化xml數據造成word文檔導出.doc》中說明比較清楚了。可是其中的細節並未說到,所以本身折騰了兩天總算成功了。如下是我在使用過程當中碰到的問題要點:app

 

必須使用word 2003.

1.下面經過例子演示:框架

 

簡單 的xml以及對應的xml框架dom

 

2.分別建立03版本的word文檔log_03.doc和o7版本的word文檔log_07.docx,並都應用以上生成的log.xsd框架spa

 

分別另存爲log_03_doc.xml,log_07_doc.xml。.net

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

 

log_03_doc.xml生成log_03.xslt時會彈出以上對話框,僅僅選中xml中指定的namespace就能夠了。xml

 

 

log_07_doc.xml生成log_07.xslt時會彈出以上對話框,就是沒有xml中指定的namespace,全部不管怎麼選,生成的xslt都不是咱們想要的。blog

不要選其餘namespace

log_03_doc.xml生成log_03.xslt時會彈出以上對話框,不要隨便再選其餘namespace。 生成的xslt截圖圖片

 

 

 

若是再選中其餘namespace,生成的xslt也不是咱們要的。生成xslt截圖文檔

顯然跟上面的不同。

 

 

 

 

 

 

插入圖片

要實現插入圖片,須要修改log_03.doc.

從新生成log_03.xslt,並修改<ns0:image>節點。

一、刪除整個v:shapetype 節點

二、刪除  <w:binData節點中的數據,並添加<xsl:value-ofselect="."/>

修改以後

三、修改v:shape 節點,去掉 style 屬性,增長xsl 節點,以下:

 

四、去掉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

相關文章
相關標籤/搜索