Как добавить '' якорь '' изображений в текстовый документ open-xml? - PullRequest
0 голосов
/ 07 июня 2019

В настоящее время я пытаюсь добавить изображения в текстовый документ, используя open- xml sdk 2.5 .Для меня это нормально работает со встроенными изображениями, но мне так и не удалось заставить работать якорные изображения.

Для пояснения: под встроенными изображениями я имею в виду добавление встроенного объекта к объекту рисования с привязанными изображениями, добавление объекта привязки к объекту чертежа.

Я уже читал документацию по docs.microsoft одобавление изображений в документ текстовой обработки, но при этом обрабатываются только встроенные изображения (ссылка: Вставка изображения в документ текстовой обработки (Open XML SDK) . Я также нашел ответ о переполнении стека, в котором приведен пример реализации изякорный объект, проблема в том, что этот образец не работает (Ссылка на пример кода: якорный встроенный текст с изображением . Затем я создал текстовый документ с якорным изображением и открыл этот файл Word в инструменте повышения производительности Microsoft.Затем я попытался скопировать и вставить сгенерированный код изображения в свой проект, что также не сработало. Я также попытался настроить этот код, но он тоже не сработал.

Я предоставляю здесь свой встроенный коди якорный код, вместе с результирующими XML-файлами.d в документах Microsoft:

MainDocumentPart mainPart = (MainDocumentPart)targetDocPart;
                        imgp = mainPart.AddImagePart(ImagePartType.Png);
                        MemoryStream memStream = new MemoryStream(Convert.FromBase64String(data));
                        imgp.FeedData(memStream);
                        string relationshipId = targetDocPart.GetIdOfPart(imgp);
WordDrawing = GenerateInlineDrawing(relationshipId);
//Later this drawing is added to a run, paragraph and finally to the doc...

Встроенный код:


        private Drawing GenerateInlineDrawing(string relationshipId)
        {
            DW.Extent extent = new DW.Extent() {Cx = 990000L, Cy = 792000L};
            DW.EffectExtent effectEx = new DW.EffectExtent()
            {
                LeftEdge = 500L,
                TopEdge = 0L,
                RightEdge = 0L,
                BottomEdge = 0L
            };
            DW.DocProperties docProp = new DW.DocProperties()
            {
                Id = (UInt32Value) 1U,
                Name = "Picture 1"
            };
            DW.NonVisualGraphicFrameDrawingProperties nonVis = new DW.NonVisualGraphicFrameDrawingProperties(
                new A.GraphicFrameLocks() {NoChangeAspect = true});
            A.Graphic graphic = new A.Graphic(
                new A.GraphicData(
                        new PIC.Picture(
                            new PIC.NonVisualPictureProperties(
                                new PIC.NonVisualDrawingProperties()
                                {
                                    Id = (UInt32Value) 0U,
                                    Name = "New Bitmap Image.png"
                                },
                                new PIC.NonVisualPictureDrawingProperties()),
                            new PIC.BlipFill(
                                new A.Blip(
                                    new A.BlipExtensionList(
                                        new A.BlipExtension()
                                        {
                                            Uri =
                                                "{28A0092B-C50C-407E-A947-70E740481C1C}"
                                        })
                                )
                                {
                                    Embed = relationshipId,
                                    CompressionState =
                                        A.BlipCompressionValues.Print
                                },
                                new A.Stretch(
                                    new A.FillRectangle())),
                            new PIC.ShapeProperties(
                                new A.Transform2D(
                                    new A.Offset() {X = 0L, Y = 0L},
                                    new A.Extents() {Cx = 990000L, Cy = 792000L}),
                                new A.PresetGeometry(
                                        new A.AdjustValueList()
                                    )
                                    {Preset = A.ShapeTypeValues.Rectangle}))
                    )
                    {Uri = "http://schemas.openxmlformats.org/drawingml/2006/picture"});
            //nonVis, effectEx
            return new Drawing(new DW.Inline(extent, docProp, graphic));
        }

Встроенный XML:

<w:document xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture" xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:cx="http://schemas.microsoft.com/office/drawing/2014/chartex" xmlns:cx1="http://schemas.microsoft.com/office/drawing/2015/9/8/chartex" xmlns:cx2="http://schemas.microsoft.com/office/drawing/2015/10/21/chartex" xmlns:cx3="http://schemas.microsoft.com/office/drawing/2016/5/9/chartex" xmlns:cx4="http://schemas.microsoft.com/office/drawing/2016/5/10/chartex" xmlns:cx5="http://schemas.microsoft.com/office/drawing/2016/5/11/chartex" xmlns:cx6="http://schemas.microsoft.com/office/drawing/2016/5/12/chartex" xmlns:cx7="http://schemas.microsoft.com/office/drawing/2016/5/13/chartex" xmlns:cx8="http://schemas.microsoft.com/office/drawing/2016/5/14/chartex" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:aink="http://schemas.microsoft.com/office/drawing/2016/ink" xmlns:am3d="http://schemas.microsoft.com/office/drawing/2017/model3d" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:w16cid="http://schemas.microsoft.com/office/word/2016/wordml/cid" xmlns:w16se="http://schemas.microsoft.com/office/word/2015/wordml/symex" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" mc:Ignorable="w14 w15 w16se w16cid wp14">
  <w:body>
    <w:p w14:paraId="0E1A9AD6">
      <w:pPr>
        <w:rPr>
          <w:lang w:val="de-DE" />
        </w:rPr>
      </w:pPr>
      <w:r>
        <w:t />
      </w:r>
      <w:r>
        <w:rPr>
          <w:lang w:val="de-DE" />
        </w:rPr>
        <w:drawing>
          <wp:inline>
            <wp:extent cx="990000" cy="792000" />
            <wp:docPr id="1" name="Picture 1" />
            <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="New Bitmap Image.png" />
                    <pic:cNvPicPr />
                  </pic:nvPicPr>
                  <pic:blipFill>
                    <a:blip r:embed="R9428c323687947d3" cstate="print">
                      <a:extLst>
                        <a:ext uri="{28A0092B-C50C-407E-A947-70E740481C1C}" />
                      </a:extLst>
                    </a:blip>
                    <a:stretch>
                      <a:fillRect />
                    </a:stretch>
                  </pic:blipFill>
                  <pic:spPr>
                    <a:xfrm>
                      <a:off x="0" y="0" />
                      <a:ext cx="990000" cy="792000" />
                    </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:p w14:paraId="01834FB7">
      <w:pPr>
        <w:rPr>
          <w:lang w:val="de-DE" />
        </w:rPr>
      </w:pPr>
      <w:r>
        <w:t />
      </w:r>
    </w:p>
    <w:sectPr w:rsidRPr="00A36CD5" w:rsidR="00A178D9" w:rsidSect="00DC0279">
      <w:headerReference w:type="default" r:id="rId7" />
      <w:footerReference w:type="default" r:id="rId8" />
      <w:pgSz w:w="11907" w:h="16840" w:code="9" />
      <w:pgMar w:top="1440" w:right="1077" w:bottom="1440" w:left="1440" w:header="851" w:footer="851" w:gutter="0" />
      <w:cols w:space="708" />
      <w:docGrid w:linePitch="360" />
    </w:sectPr>
  </w:body>
</w:document>

Код привязки:

 private Drawing GenerateAnchorDrawing(string relationshipId)
        {
            Random random = new Random();
            int randomNumber = random.Next(0, 100);

            DW.Extent extent = new DW.Extent() { Cx = 990000L, Cy = 792000L };
            DW.EffectExtent effectEx = new DW.EffectExtent()
            {
                LeftEdge = 500L,
                TopEdge = 0L,
                RightEdge = 0L,
                BottomEdge = 0L
            };
            DW.DocProperties docProp = new DW.DocProperties()
            {
                Id = UInt32Value.FromUInt32((uint)randomNumber),
                Name = $"Picture {randomNumber+10}"
            };
            DW.NonVisualGraphicFrameDrawingProperties nonVis = new DW.NonVisualGraphicFrameDrawingProperties(
                new A.GraphicFrameLocks() { NoChangeAspect = true });
            A.Graphic graphic = new A.Graphic(
                new A.GraphicData(
                        new PIC.Picture(
                            new PIC.NonVisualPictureProperties(
                                new PIC.NonVisualDrawingProperties()
                                {
                                    Id = UInt32Value.FromUInt32((uint)randomNumber),
                                    Name = $"NewBitmap{randomNumber+10}.png"
                                },
                                new PIC.NonVisualPictureDrawingProperties()),
                            new PIC.BlipFill(
                                new A.Blip(
                                    new A.BlipExtensionList(
                                        new A.BlipExtension()
                                        {
                                            Uri =
                                                "{28A0092B-C50C-407E-A947-70E740481C1C}"
                                        })
                                )
                                {
                                    Embed = relationshipId,
                                    CompressionState =
                                        A.BlipCompressionValues.Print
                                },
                                new A.Stretch(
                                    new A.FillRectangle())),
                            new PIC.ShapeProperties(
                                new A.Transform2D(
                                    new A.Offset() { X = 0L, Y = 0L },
                                    new A.Extents() { Cx = 990000L, Cy = 792000L }),
                                new A.PresetGeometry(
                                        new A.AdjustValueList()
                                    )
                                { Preset = A.ShapeTypeValues.Rectangle }))
                    )
                { Uri = "http://schemas.openxmlformats.org/drawingml/2006/picture" });
            DW.SimplePosition simplePos = new SimplePosition(){X = 0,Y=0};
            DW.HorizontalPosition positionH = new DW.HorizontalPosition(new PositionOffset("2084375"));
            positionH.RelativeFrom = HorizontalRelativePositionValues.Column;

            DW.VerticalPosition positionY = new DW.VerticalPosition(new PositionOffset("628878"));
            positionY.RelativeFrom = VerticalRelativePositionValues.Paragraph;

            DW.Anchor anchor = new DW.Anchor(simplePos,positionH,positionY,extent,docProp,graphic);
            anchor.DistanceFromTop = 0;
            anchor.DistanceFromBottom = 0;
            anchor.DistanceFromLeft = 114300;
            anchor.DistanceFromRight = 114300;
            anchor.SimplePosition = simplePos;
            anchor.RelativeHeight = 251658240;
            anchor.BehindDoc = true;
            anchor.Locked = false;
            anchor.LayoutInCell = true;
            anchor.AllowOverlap = true;
            anchor.EditId = "7CEAA868";
            anchor.AnchorId = GetRandomHexNumber(8);


            //nonVis, effectEx
            return new Drawing(anchor);
}

static Random random = new Random();
        public static string GetRandomHexNumber(int digits)
        {
            byte[] buffer = new byte[digits / 2];
            random.NextBytes(buffer);
            string result = String.Concat(buffer.Select(x => x.ToString("X2")).ToArray());
            if (digits % 2 == 0)
                return result;
            return result + random.Next(16).ToString("X");
        }

Якорный XML:

<w:document xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture" xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:cx="http://schemas.microsoft.com/office/drawing/2014/chartex" xmlns:cx1="http://schemas.microsoft.com/office/drawing/2015/9/8/chartex" xmlns:cx2="http://schemas.microsoft.com/office/drawing/2015/10/21/chartex" xmlns:cx3="http://schemas.microsoft.com/office/drawing/2016/5/9/chartex" xmlns:cx4="http://schemas.microsoft.com/office/drawing/2016/5/10/chartex" xmlns:cx5="http://schemas.microsoft.com/office/drawing/2016/5/11/chartex" xmlns:cx6="http://schemas.microsoft.com/office/drawing/2016/5/12/chartex" xmlns:cx7="http://schemas.microsoft.com/office/drawing/2016/5/13/chartex" xmlns:cx8="http://schemas.microsoft.com/office/drawing/2016/5/14/chartex" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:aink="http://schemas.microsoft.com/office/drawing/2016/ink" xmlns:am3d="http://schemas.microsoft.com/office/drawing/2017/model3d" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:w16cid="http://schemas.microsoft.com/office/word/2016/wordml/cid" xmlns:w16se="http://schemas.microsoft.com/office/word/2015/wordml/symex" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" mc:Ignorable="w14 w15 w16se w16cid wp14">
  <w:body>
    <w:p w14:paraId="0E1A9AD6">
      <w:pPr>
        <w:rPr>
          <w:lang w:val="de-DE" />
        </w:rPr>
      </w:pPr>
      <w:r>
        <w:t />
      </w:r>
      <w:r>
        <w:rPr>
          <w:lang w:val="de-DE" />
        </w:rPr>
        <w:drawing>
          <wp:anchor distT="0" distB="0" distL="114300" distR="114300" relativeHeight="251658240" behindDoc="1" locked="0" layoutInCell="1" allowOverlap="1" wp14:editId="7CEAA868" wp14:anchorId="2AC6C3E0">
            <wp:simplePos x="0" y="0" />
            <wp:positionH relativeFrom="column">
              <wp:posOffset>2084375</wp:posOffset>
            </wp:positionH>
            <wp:positionV relativeFrom="paragraph">
              <wp:posOffset>628878</wp:posOffset>
            </wp:positionV>
            <wp:extent cx="990000" cy="792000" />
            <wp:docPr id="71" name="Picture 81" />
            <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="71" name="NewBitmap81.png" />
                    <pic:cNvPicPr />
                  </pic:nvPicPr>
                  <pic:blipFill>
                    <a:blip r:embed="Rd17f79509d4844d0" cstate="print">
                      <a:extLst>
                        <a:ext uri="{28A0092B-C50C-407E-A947-70E740481C1C}" />
                      </a:extLst>
                    </a:blip>
                    <a:stretch>
                      <a:fillRect />
                    </a:stretch>
                  </pic:blipFill>
                  <pic:spPr>
                    <a:xfrm>
                      <a:off x="0" y="0" />
                      <a:ext cx="990000" cy="792000" />
                    </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>
    <w:p w14:paraId="01834FB7">
      <w:pPr>
        <w:rPr>
          <w:lang w:val="de-DE" />
        </w:rPr>
      </w:pPr>
      <w:r>
        <w:t />
      </w:r>
    </w:p>
    <w:sectPr w:rsidRPr="00A36CD5" w:rsidR="00A178D9" w:rsidSect="00DC0279">
      <w:headerReference w:type="default" r:id="rId7" />
      <w:footerReference w:type="default" r:id="rId8" />
      <w:pgSz w:w="11907" w:h="16840" w:code="9" />
      <w:pgMar w:top="1440" w:right="1077" w:bottom="1440" w:left="1440" w:header="851" w:footer="851" w:gutter="0" />
      <w:cols w:space="708" />
      <w:docGrid w:linePitch="360" />
    </w:sectPr>
  </w:body>
</w:document>

Когда я выполняю код привязки и пытаюсь открыть полученный документ, я получаю следующую ошибку: '' Мыизвиняюсь.Мы не можем открыть Document_ReportWithImages.docx, потому что обнаружили проблему с его контекстами.

Подробности.Сведения об ошибках отсутствуют. Расположение: Часть: /word/document.xml, строка: 0, столбец: 0

Снимок экрана:

enter image description here

Вопрос в том, как получить эти якорные изображения в текстовый файл: -)

...