Поиск…


Вступление

Вставка изображения в текстовый документ с использованием OpenXml требует двух действий: добавьте изображение внутри openxml и обратитесь к изображению в вашем документе

замечания

если вы добавите изображение в структуру openxml без ссылки на него в Word Document, то при следующем «открытии / сохранении» вашего документа файл изображения будет удален.

Word удаляет все ссылки для сирот. Поэтому не забудьте добавить изображение в Word Document, иначе вам нужно будет переделать все этапы.

Добавьте изображение в структуру OpenXml

private string AddGraph(WordprocessingDocument wpd, string filepath)
{
    ImagePart ip = wpd.MainDocumentPart.AddImagePart(ImagePartType.Jpeg);
    using (FileStream fs = new FileStream(filepath, FileMode.Open))
    {
        if (fs.Length == 0) return string.Empty;
        ip.FeedData(fs);
    }

    return wpd.MainDocumentPart.GetIdOfPart(ip);
}

В этом случае мы используем FileStream для извлечения изображения, но feedData (Stream) ждет любого потока.

См. Изображение в документе Word

private void InsertImage(WordprocessingDocument wpd, OpenXmlElement parent, string filepath)
{
    string relationId = AddGraph(wpd, filepath);
    if (!string.IsNullOrEmpty(relationId))
    {
        Size size = new Size(800, 600);

        Int64Value width = size.Width * 9525;
        Int64Value height = size.Height * 9525;

        var draw = new Drawing(
            new DW.Inline(
                new DW.Extent() { Cx = width, Cy = height },
                new DW.EffectExtent()
                {
                    LeftEdge = 0L,
                    TopEdge = 0L,
                    RightEdge = 0L,
                    BottomEdge = 0L
                },
                new DW.DocProperties()
                {
                    Id = (UInt32Value)1U,
                    Name = "my image name"
                },
                new DW.NonVisualGraphicFrameDrawingProperties(new A.GraphicFrameLocks() { NoChangeAspect = true }),
                new A.Graphic(
                    new A.GraphicData(
                        new PIC.Picture(
                            new PIC.NonVisualPictureProperties(
                                new PIC.NonVisualDrawingProperties()
                                {
                                    Id = (UInt32Value)0U,
                                    Name = relationId
                                },
                                new PIC.NonVisualPictureDrawingProperties()),
                                new PIC.BlipFill(
                                    new A.Blip(
                                        new A.BlipExtensionList(
                                            new A.BlipExtension() { Uri = "{28A0092B-C50C-407E-A947-70E740481C1C}" })
                                        )
                                    {
                                        Embed = relationId,
                                        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 = width, Cy = height }),
                                                    new A.PresetGeometry(new A.AdjustValueList()) { Preset = A.ShapeTypeValues.Rectangle }))) { Uri = "http://schemas.openxmlformats.org/drawingml/2006/picture" })
                                                    )
            {
                DistanceFromTop = (UInt32Value)0U,
                DistanceFromBottom = (UInt32Value)0U,
                DistanceFromLeft = (UInt32Value)0U,
                DistanceFromRight = (UInt32Value)0U,
                EditId = "50D07946"
            });

        parent.Append(draw);
    }
}

В этом примере я устанавливаю статический размер 800 * 600, но вы можете установить любой необходимый вам размер



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow