В настоящее время я пытаюсь добавить изображения в текстовый документ, используя 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
Снимок экрана:
Вопрос в том, как получить эти якорные изображения в текстовый файл: -)