Word 2007, Open XML - встраивание изображения - PullRequest
6 голосов
/ 18 декабря 2008

Знаете ли вы, какая базовая информация ДОЛЖНА включать абзац (<w:p/>) в document.xml внутри документа * .docx, в котором указано изображение? Я знаю, что должно быть:

<a:blip r:embed="rId4" /> 

указание идентификатора отношения, но что еще? Найти его в Google очень сложно, и экспериментирование с вырезанием тегов из готового документа или чтением спецификации занимает много времени.

Пример со всеми необходимыми тегами будет принят.

1 Ответ

7 голосов
/ 18 декабря 2008

Word довольно требователен к предоставленному входному XML. Чтобы встроить изображение, вы должны предоставить достаточно информации. Вот простой пример:

document.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:document xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" 
            xmlns:v="urn:schemas-microsoft-com:vml" 
            xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" 
            xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
  <w:body>
    <w:p>
      <w:r>
        <w:drawing>
          <wp:inline distT="0" distB="0" distL="0" distR="0">
            <wp:extent cx="5943600" cy="3717290"/>
            <wp:docPr id="1" name="Picture 0" descr="vlcsnap-325726.png"/>
            <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="myImage.png"/>
                    <pic:cNvPicPr/>
                  </pic:nvPicPr>
                  <pic:blipFill>
                    <a:blip r:embed="rId4"/>
                    <a:stretch>
                      <a:fillRect/>
                    </a:stretch>
                  </pic:blipFill>
                  <pic:spPr>
                    <a:xfrm>
                      <a:off x="0" y="0"/>
                      <a:ext cx="5943600" cy="3717290"/>
                    </a:xfrm>
                    <a:prstGeom prst="rect">
                      <a:avLst/>
                    </a:prstGeom>
                  </pic:spPr>
                </pic:pic>
              </a:graphicData>
            </a:graphic>
          </wp:inline>
        </w:drawing>
      </w:r>
    </w:p>
  </w:body>
</w:document>

document.xml.rels

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
  <!-- other relationships go here -->
  <Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="media/image1.png"/>
</Relationships>

И, конечно, изображение должно быть добавлено в пакет в правильном месте (media / image1.png)

Поскольку все это довольно сложно, я бы рекомендовал вам использовать OpenXML SDK 2.0 , предоставленный Microsoft или другой библиотекой, например OpenXML4J . Эти библиотеки, особенно от Microsoft, могут значительно облегчить вашу работу.

...