2012-01-25 48 views
0

我是新來的XML/XSLT,並且在修改Word XSLT模板時遇到試圖更改圖像的問題。Word XSLT模板 - 更改圖像

我有4個環節進行...

  1. Word模板文件
  2. XML文件
  3. XSLT樣式表(從Word模板取出,並添加XML轉換成佔位符)
  4. PHP代碼它採用XML並將其應用於XSLT模板以生成Word文檔。

除了涉及圖像時,這一切似乎都很奏效。基本上,我似乎無法使用XML值加載圖像。

Word文檔 只是一個模仿最終輸出應該是什麼的Word 2007文檔。包含我試圖在XSLT中動態替換的佔位圖,但Word文檔模板中的圖像總是顯示出來,無論如何。

XML:

<Assessment> 
    <Title> 
    ... 
    </Title> 
    <Scorecard> 
    ... 
    <Graph0>http://pathtoimage.jpg</Graph0> 
    ... 
    </Scorecard> 
</Assessment> 

如果評估/記分卡/ Graph0是通向我要插入的圖像。

XSLT:

... 

<w:drawing> 
    <wp:inline distT="0" distB="0" distL="0" distR="0"> 
    <wp:extent cx="5709285" cy="1524000"/> 
    <wp:effectExtent l="19050" t="0" r="5715" b="0"/> 
    <wp:docPr id="3" name="Picture 3" descr="{Assessment/Scorecard/Graph0}"/> 
    <wp:cNvGraphicFramePr> 
     <a:graphicFrameLocks xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" noChangeAspect="1"/> 
    </wp:cNvGraphicFramePr> 
    <a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"> 
     <a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/picture"> 
     <pic:pic xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture"> 
      <pic:nvPicPr> 
      <pic:cNvPr id="0" name="Picture 3" descr="{Assessment/Scorecard/Graph0}"/> 
      <pic:cNvPicPr> 
       <a:picLocks noChangeAspect="1" noChangeArrowheads="1"/> 
      </pic:cNvPicPr> 
      </pic:nvPicPr> 
      <pic:blipFill> 
      <a:blip r:embed="rId9" r:link="rId10" cstate="print"/> 
      <a:srcRect/> 
      <a:stretch> 
       <a:fillRect/> 
      </a:stretch> 
      </pic:blipFill> 
      <pic:spPr bwMode="auto"> 
      <a:xfrm> 
       <a:off x="0" y="0"/> 
       <a:ext cx="5709285" cy="1524000"/> 
      </a:xfrm> 
      <a:prstGeom prst="rect"> 
       <a:avLst/> 
      </a:prstGeom> 
      <a:noFill/> 
      <a:ln w="9525"> 
       <a:noFill/> 
       <a:miter lim="800000"/> 
       <a:headEnd/> 
       <a:tailEnd/> 
      </a:ln> 
      </pic:spPr> 
     </pic:pic> 
     </a:graphicData> 
    </a:graphic> 
    </wp:inline> 
</w:drawing> 

... 

<w:tc> 
    <w:tcPr> 
    <w:tcW w:w="0" w:type="auto"/> 
    <w:tcMar> 
     <w:top w:w="75" w:type="dxa"/> 
     <w:left w:w="300" w:type="dxa"/> 
     <w:bottom w:w="75" w:type="dxa"/> 
     <w:right w:w="75" w:type="dxa"/> 
    </w:tcMar> 
    <w:vAlign w:val="center"/> 
    <w:hideMark/> 
    </w:tcPr> 
    <w:p w:rsidR="0057097D" w:rsidRDefault="0057097D"> 
    <w:pPr> 
     <w:pStyle w:val="Heading3"/> 
     <w:rPr> 
     <w:rFonts w:ascii="Arial" w:eastAsia="Times New Roman" w:hAnsi="Arial" w:cs="Arial"/> 
     </w:rPr> 
    </w:pPr> 
    <w:r> 
     <w:rPr> 
     <w:rFonts w:ascii="Arial" w:eastAsia="Times New Roman" w:hAnsi="Arial" w:cs="Arial"/> 
     </w:rPr> 
     <w:t xml:space="preserve">Prepared for: <xsl:value-of select="Assessment/Title/CompanyName" /></w:t> 
    </w:r> 
    </w:p> 
    <w:p w:rsidR="0057097D" w:rsidRDefault="0057097D"> 
    <w:pPr> 
     <w:pStyle w:val="Heading3"/> 
     <w:rPr> 
     <w:rFonts w:ascii="Arial" w:eastAsia="Times New Roman" w:hAnsi="Arial" w:cs="Arial"/> 
     </w:rPr> 
    </w:pPr> 
    <w:r> 
     <w:rPr> 
     <w:rFonts w:ascii="Arial" w:eastAsia="Times New Roman" w:hAnsi="Arial" w:cs="Arial"/> 
     </w:rPr> 
     <w:t><xsl:value-of select="Assessment/Title/ReportDate" /></w:t> 
    </w:r> 
    </w:p> 
    <xsl:for-each select="Assessment/Title/Address"> 
    <w:p w:rsidR="0057097D" w:rsidRDefault="0057097D"> 
     <w:pPr> 
     <w:pStyle w:val="NormalWeb"/> 
     <w:rPr> 
      <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/> 
     </w:rPr> 
     </w:pPr> 
     <w:r> 
     <w:rPr> 
      <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/> 
     </w:rPr> 
     <w:t><xsl:value-of select="Line" /></w:t> 
     </w:r> 
    </w:p> 
    </xsl:for-each> 
</w:tc> 

凡{評估/記分卡/ Graph0}是新的圖像佔位符。

PHP

$xmlDataFile = ("Assessment.xml"); 
$xsltFile = ("Assessment.xslt"); 
$sourceTemplate = ("AssessmentTemplate.docx"); 
$outputDocument = ("Assessment.docx"); 

$xmlDocument = new DOMDocument(); 
$xmlDocument->load($xmlDataFile); 

$xsltDocument = new DOMDocument(); 
$xsltDocument->load($xsltFile); 

$xsltProcessor = new XSLTProcessor(); 
$xsltProcessor->importStylesheet($xsltDocument); 

$newContent = $xsltProcessor->transformToXML($xmlDocument); 

if (copy($sourceTemplate, $outputDocument)) { 
    $zipArchive = new ZipArchive(); 
    $zipArchive->open($outputDocument); 
    $zipArchive->addFromString("word/document.xml", $newContent); 
    $zipArchive->close(); 
} 

這使得它一起,併產生我最後的Word文檔。正如我所說,除了圖像以外,這一切都很棒。所有文本值都更新爲XML文件中的值,但我似乎無法獲取更新的圖像。

對於工作我使用的值:

<xsl:value-of select="..." /> 

而對於不工作的值(圖像)我使用:

{Assessment/Scorecard/Graph0} 

我假設它是與插入XML內容的這種方法有關,但它也不會接受大括號方法中的value-of方法,並且實際上會中斷文檔。

有什麼建議嗎?有一個更好的方法嗎?

在此先感謝!

+0

兩點建議之前。 – Kevan

回答

0

兩個建議。 您可以添加註釋調試評估/記分卡/ Graph0的價值,你使用它

<xsl:comment><xsl:value-of select="Assessment/Scorecard/Graph0"/></xsl:comment> 

Second, you could change 
<wp:docPr id="3" name="Picture 3" descr="{Assessment/Scorecard/Graph0}"/> 

<wp:docPr id="3" name="Picture 3"> 
    <xsl:attribute name="descr"> 
     <xsl:value-of select="Assessment/Scorecard/Graph0"/> 
    </xsl:attribute> 
</wp:docPr> 
+0

感謝您的回覆。我的代碼實際上正在工作,但Word文檔中的圖像未被替換。這是由於另一個問題,但不是這一個。 – johnnycanehdian