Шаблон Word XSLT - Изменение изображений - PullRequest
0 голосов
/ 25 января 2012

Я новичок в XML / XSLT, и у меня возникла проблема при попытке изменить изображение при изменении шаблона Word XSLT.

У меня есть 4 части к этому ...

  1. Шаблон Word Document
  2. XML-файл
  3. Таблица стилей XSLT (взята из шаблона Word и добавлена ​​в заполнители XML)
  4. PHP-код, который принимает XML и применяет его к шаблону XSLT для создания документа Word.

Кажется, все это работает отлично, за исключением изображений. Похоже, я не могу загрузить изображения, используя значения XML.

Word Document Просто документ Word 2007, который имитирует окончательный результат. Содержит графы-заполнители, которые я пытаюсь динамически заменить в XSLT, но изображения в шаблоне текстового документа всегда отображаются независимо от того, что.

XML:

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

Где Assessment / Scorecard / 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>

Где {Assessment / Scorecard / 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 вместо метода фигурных скобок и фактически нарушает документ.

Есть предложения? Есть ли лучший способ сделать это?

Заранее спасибо!

1 Ответ

0 голосов
/ 26 января 2012

Два предложения.Вы можете добавить комментарий для отладки значения Assessment / Scorecard / 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...