erge
@erge
Примус починяю

Как в DOCX файл добавить изображение в необходимое место документа?

1. Необходимо добавить в файл и спозиционировать относительно какго-то элемента (допустим таблицы) изображение PNG/JPG (логотип, скан печати и пр.), т.е. изображение должно быть поверх текста, а не в тексте.
2. Заменить изображение в шаблоне Docx, да понимаю делается элементарной подменой файла изображения в архиве, но размеры изображений разные, как его спозиционировать?

ну условно допустим позиционировать по центру ячейки таблицы, которую впрочем тоже надо найти (по тексту в ячейке?).

пробовал гуглить, пока ничего внятного не нашел, кроме банального добавления изображения.

как вставляется изображение в XML простыню нашел:
spoiler
<w:p w:rsidR="00C236FA" w:rsidRDefault="00894C8C" w:rsidP="00C236FA">
            <w:pPr><w:pStyle w:val="a5"/><w:snapToGrid w:val="0"/>
              <w:rPr><w:b/><w:szCs w:val="24"/></w:rPr>
            </w:pPr>
            <w:r>
              <w:rPr><w:b/><w:noProof/><w:szCs w:val="24"/><w:lang w:eastAsia="ru-RU"/></w:rPr>
              <w:drawing>
                <wp:anchor distT="0" distB="0" distL="114300" distR="114300" simplePos="0" relativeHeight="251676672" behindDoc="0" locked="0" layoutInCell="1" allowOverlap="1"><wp:simplePos x="0" y="0"/>
                  <wp:positionH relativeFrom="column">
                    <wp:posOffset>472440</wp:posOffset>
                  </wp:positionH>
                  <wp:positionV relativeFrom="paragraph">
                    <wp:posOffset>76200</wp:posOffset>
                  </wp:positionV><wp:extent cx="1950720" cy="1539240"/><wp:effectExtent l="0" t="0" r="0" b="0"/><wp:wrapNone/><wp:docPr id="11" name="Рисунок 1" descr="Подпись+печать.bmp"/>
                  <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="Подпись+печать.bmp"/><pic:cNvPicPr/></pic:nvPicPr>
                        <pic:blipFill>
                          <a:blip r:embed="rId8" cstate="print">
                            <a:clrChange>
                              <a:clrFrom><a:srgbClr val="FFFFFF"/></a:clrFrom>
                              <a:clrTo>
                                <a:srgbClr val="FFFFFF"><a:alpha val="0"/></a:srgbClr>
                              </a:clrTo>
                            </a:clrChange>
                          </a:blip>
                          <a:stretch><a:fillRect/></a:stretch>
                        </pic:blipFill>
                        <pic:spPr>
                          <a:xfrm><a:off x="0" y="0"/><a:ext cx="1950720" cy="1539240"/></a:xfrm>
                          <a:prstGeom prst="rect"><a:avLst/></a:prstGeom>
                        </pic:spPr>
                      </pic:pic>
                    </a:graphicData>
                  </a:graphic>
                </wp:anchor>
              </w:drawing>
            </w:r>
          </w:p>


но непонятно даже в каких единицах там смещения и размеры :?
и не понятно как изображение скалится к нормальным (реальным размерам картинки на бумаге) имея такие размеры:
5dc96e0652f44047653094.png

как это делают в онлайн генераторах документов (договоров, счетов и пр)?

PS: интересуют любые ответы, на любом из PHP, PYTHON, JAVA, NODE.JS, PERL ЯП
  • Вопрос задан
  • 1663 просмотра
Решения вопроса 1
azerphoenix
@azerphoenix
Java Software Engineer
Здравствуйте!
Я не эксперт в этом вопросе, но недавно самому пришлось программно создавать docx файлы и поискав я наткнулся на 2 библиотеки.
1) docx4j
https://www.docx4java.org/trac/docx4j
2) docx-stamper (основан на docx4j, поддерживает SpEL)
https://github.com/thombergs/docx-stamper
С ее помощью можно создать шаблон и в нужном месте документа добавить переменную SpEL. ( ${user.image} ) и само собой в указанную область уже добавлять ваше изображение.

Что касается позиционирования изображения, то посмотрите эти ссылки. Вдруг, помогут)
https://www.docx4java.org/forums/docx-java-f6/how-...
https://stackoverflow.com/questions/24745423/how-t...
https://www.docx4java.org/forums/docx-java-f6/how-...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы