将多个图像添加到特定位置的 Word 文档 OpenXML

Adding multiple images to a word document at a specific locations OpenXML

我正在使用 Office Open XML,我必须在特定点添加图像。在文档上我有一个 'tag' 所以我可以很好地找到它。但是,当我添加多张图像时,它会损坏文件。

这是我的代码:(修改自 https://msdn.microsoft.com/en-us/library/office/bb497430.aspx

使用:

using DocumentFormat.OpenXml.Wordprocessing;
using A = DocumentFormat.OpenXml.Drawing;
using DW = DocumentFormat.OpenXml.Drawing.Wordprocessing;
using PIC = DocumentFormat.OpenXml.Drawing.Pictures;

我的主要:

private const string Loc = @"D:\Documents-Mass Output.docx";
static void Main(string[] args)
{
    var images = new[]
    {
        @"D:\Documents\NPL.bmp",
        @"D:\Documents\NVT.bmp",
        @"D:\Documents\MPL.bmp",
        @"D:\Documents\MVT.bmp"
    };
    var tags = new[]
    {
        "NormalGraph1",
        "NormalGraph2",
        "MisGraph1",
        "MisGraph2"
    };

    InsertPicture(Loc, images, tags);
}

方法如下:

/// <summary>
/// Inserts a picture in a paragraph with a specific text
/// </summary>
/// <param name="document">Where the file is located</param>
/// <param name="fileName">Name of the image file</param>
/// <param name="tag">Insert Image in the first paragraph that contains this text</param>
public static void InsertPicture(string document, string[] fileName, string[] tag)
{
    using (var wordprocessingDocument = WordprocessingDocument.Open(document, true))
    {
        var mainPart = wordprocessingDocument.MainDocumentPart;

        for (var i = 0; i < fileName.Length; i++)
        {
            var imagePart = mainPart.AddImagePart(ImagePartType.Bmp);
            using (var stream = new FileStream(fileName[i], FileMode.Open))
            {
                imagePart.FeedData(stream);
            }
            AddImageToBody(wordprocessingDocument, mainPart.GetIdOfPart(imagePart), tag[i]);
        }
    }
}

private static void AddImageToBody(WordprocessingDocument wordDoc, string relationshipId, string tag)
{
    // Define the reference of the image.
    var element =
            new Drawing(
                new DW.Inline(
                    new DW.Extent { Cx = 5d.Inches(), Cy = 2.66.Inches() }, // Width and Height of the image in inches. 1" = 1000000L
                    new DW.EffectExtent
                    {
                        LeftEdge = 0L,
                        TopEdge = 0L,
                        RightEdge = 0L,
                        BottomEdge = 0L
                    },
                    new DW.DocProperties
                    {
                        Id = 1U,
                        Name = tag // Make sure all of the images have a different 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 = $"{tag}.bmp" // Make sure all of the images have a different name
                                    },
                                    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 = 5d.Inches(), Cy = 2.66.Inches() }), // Width and Height of the image in inches. 1" = 1000000L
                                    new A.PresetGeometry(
                                        new A.AdjustValueList()
                                    )
                                    { Preset = A.ShapeTypeValues.Rectangle }))
                        )
                        { Uri = "http://schemas.openxmlformats.org/drawingml/2006/picture" })
                )
                {
                    DistanceFromTop = 0U,
                    DistanceFromBottom = 0U,
                    DistanceFromLeft = 0U,
                    DistanceFromRight = 0U,
                    EditId = "50D07946"
                });

    // Append the reference to the specific paragraph that contains the 'tag'.
    wordDoc.MainDocumentPart.Document.Body.Elements<Paragraph>().FirstOrDefault(f => f.InnerText.Contains(tag))?.AppendChild(new Paragraph(new Run(element)));
}

根据Word将英寸转换为英寸的函数:

private static long Inches(this double size)
{
    return (long) (size*1000000);
}

编辑: 以下是 header1.xml 的内容。添加图片前后是一样的

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:hdr 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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 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: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 wp14"><w:p w:rsidR="007D4EA8" w:rsidRPr="00E6041C" w:rsidRDefault="00292B4C" w:rsidP="00292B4C"><w:pPr><w:spacing w:after="0" w:line="240" w:lineRule="auto"/><w:rPr><w:sz w:val="24"/></w:rPr></w:pPr><w:r w:rsidRPr="00E6041C"><w:rPr><w:noProof/><w:sz w:val="28"/></w:rPr><w:drawing><wp:anchor distT="0" distB="0" distL="114300" distR="114300" simplePos="0" relativeHeight="251658240" behindDoc="1" locked="0" layoutInCell="1" allowOverlap="1" wp14:anchorId="2F59D91E" wp14:editId="24EB15EA"><wp:simplePos x="0" y="0"/><wp:positionH relativeFrom="page"><wp:align>right</wp:align></wp:positionH><wp:positionV relativeFrom="paragraph"><wp:posOffset>-157972</wp:posOffset></wp:positionV><wp:extent cx="7792085" cy="661254"/><wp:effectExtent l="0" t="0" r="0" b="5715"/><wp:wrapNone/><wp:docPr id="1" name="Picture 1"/><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="Picture 1" descr="T:\Reich USA Commercial\Logo\Logos - US\Reich USA Letterhead.png"/><pic:cNvPicPr><a:picLocks noChangeAspect="1" noChangeArrowheads="1"/></pic:cNvPicPr></pic:nvPicPr><pic:blipFill><a:blip r:embed="rId1" cstate="print"><a:extLst><a:ext uri="{28A0092B-C50C-407E-A947-70E740481C1C}"><a14:useLocalDpi xmlns:a14="http://schemas.microsoft.com/office/drawing/2010/main" val="0"/></a:ext></a:extLst></a:blip><a:stretch><a:fillRect/></a:stretch></pic:blipFill><pic:spPr bwMode="auto"><a:xfrm><a:off x="0" y="0"/><a:ext cx="7792085" cy="661254"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom><a:noFill/><a:ln><a:noFill/></a:ln><a:effectLst/><a:extLst><a:ext uri="{53640926-AAD7-44D8-BBD7-CCE9431645EC}"><a14:shadowObscured xmlns:a14="http://schemas.microsoft.com/office/drawing/2010/main"/></a:ext></a:extLst></pic:spPr></pic:pic></a:graphicData></a:graphic><wp14:sizeRelH relativeFrom="margin"><wp14:pctWidth>0</wp14:pctWidth></wp14:sizeRelH><wp14:sizeRelV relativeFrom="margin"><wp14:pctHeight>0</wp14:pctHeight></wp14:sizeRelV></wp:anchor></w:drawing></w:r>
<w:r w:rsidRPr="00E6041C"><w:rPr><w:sz w:val="28"/></w:rPr><w:t>TV</w:t></w:r>
<w:r w:rsidR="007843C2"><w:rPr><w:sz w:val="28"/></w:rPr><w:t>A</w:t></w:r>
<w:r w:rsidRPr="00E6041C"><w:rPr><w:sz w:val="28"/></w:rPr><w:t xml:space="preserve"> Number: </w:t></w:r>
<w:r w:rsidR="00F972A0"><w:rPr><w:sz w:val="28"/></w:rPr><w:t>&lt;</w:t></w:r>
<w:proofErr w:type="spellStart"/><w:r w:rsidR="00F972A0"><w:rPr><w:sz w:val="28"/></w:rPr><w:t>TVCNum</w:t></w:r>
<w:proofErr w:type="spellEnd"/><w:r w:rsidR="00F972A0"><w:rPr><w:sz w:val="28"/></w:rPr><w:t>&gt;</w:t></w:r>
</w:p><w:p w:rsidR="00940058" w:rsidRDefault="00940058"><w:pPr><w:pStyle w:val="Header"/><w:rPr><w:sz w:val="16"/></w:rPr></w:pPr></w:p><w:p w:rsidR="00BB3259" w:rsidRPr="00940058" w:rsidRDefault="00292B4C"><w:pPr><w:pStyle w:val="Header"/><w:rPr><w:sz w:val="16"/></w:rPr></w:pPr><w:r w:rsidRPr="00926942"><w:rPr><w:sz w:val="16"/></w:rPr><w:t xml:space="preserve">Torsional Vibration </w:t></w:r>
<w:r w:rsidR="007843C2"><w:rPr><w:sz w:val="16"/></w:rPr><w:t>Analysis</w:t></w:r>
</w:p><w:p w:rsidR="00BB3259" w:rsidRPr="0037430D" w:rsidRDefault="00BB3259" w:rsidP="00F909DF"><w:pPr><w:tabs><w:tab w:val="center" w:pos="4680"/><w:tab w:val="right" w:pos="9360"/></w:tabs><w:spacing w:after="0" w:line="240" w:lineRule="auto"/><w:rPr><w:sz w:val="28"/></w:rPr></w:pPr><w:r w:rsidRPr="00292B4C"><w:rPr><w:sz w:val="28"/></w:rPr><w:t xml:space="preserve">Customer: </w:t></w:r>
<w:r w:rsidR="00F972A0"><w:rPr><w:sz w:val="28"/></w:rPr><w:t>&lt;Customer&gt;</w:t></w:r>
<w:r w:rsidR="00F909DF"><w:rPr><w:sz w:val="28"/></w:rPr><w:tab/></w:r>
<w:r w:rsidR="00F909DF"><w:rPr><w:sz w:val="28"/></w:rPr><w:tab/></w:r>
<w:r w:rsidR="00F909DF" w:rsidRPr="0037430D"><w:rPr><w:sz w:val="20"/></w:rPr><w:t xml:space="preserve">Performed </w:t></w:r>
<w:proofErr w:type="gramStart"/><w:r w:rsidR="00F909DF" w:rsidRPr="0037430D"><w:rPr><w:sz w:val="20"/></w:rPr><w:t>By</w:t></w:r>
<w:proofErr w:type="gramEnd"/><w:r w:rsidR="00F909DF" w:rsidRPr="0037430D"><w:rPr><w:sz w:val="20"/></w:rPr><w:t xml:space="preserve">: </w:t></w:r>
<w:r w:rsidR="00F972A0"><w:rPr><w:sz w:val="20"/></w:rPr><w:t>&lt;User&gt;</w:t></w:r>
</w:p><w:p w:rsidR="00AF585E" w:rsidRPr="00BB3259" w:rsidRDefault="00645FF6" w:rsidP="00F909DF"><w:pPr><w:tabs><w:tab w:val="right" w:pos="9360"/></w:tabs><w:spacing w:after="0" w:line="240" w:lineRule="auto"/></w:pPr><w:r><w:rPr><w:noProof/><w:sz w:val="28"/></w:rPr><mc:AlternateContent><mc:Choice Requires="wps"><w:drawing><wp:anchor distT="0" distB="0" distL="114300" distR="114300" simplePos="0" relativeHeight="251660288" behindDoc="0" locked="0" layoutInCell="1" allowOverlap="1" wp14:anchorId="26F2E2C8" wp14:editId="4EF2E467"><wp:simplePos x="0" y="0"/><wp:positionH relativeFrom="page"><wp:posOffset>-74874</wp:posOffset></wp:positionH><wp:positionV relativeFrom="paragraph"><wp:posOffset>173822</wp:posOffset></wp:positionV><wp:extent cx="7950241" cy="0"/><wp:effectExtent l="38100" t="19050" r="69850" b="114300"/><wp:wrapNone/><wp:docPr id="3" name="Straight Connector 3"/><wp:cNvGraphicFramePr/><a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"><a:graphicData uri="http://schemas.microsoft.com/office/word/2010/wordprocessingShape"><wps:wsp><wps:cNvCnPr/><wps:spPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="7950241" cy="0"/></a:xfrm><a:prstGeom prst="line"><a:avLst/></a:prstGeom><a:ln w="12700"><a:solidFill><a:srgbClr val="335BA3"/></a:solidFill></a:ln><a:effectLst><a:outerShdw blurRad="50800" dist="38100" dir="5400000" algn="t" rotWithShape="0"><a:prstClr val="black"><a:alpha val="40000"/></a:prstClr></a:outerShdw></a:effectLst></wps:spPr><wps:style><a:lnRef idx="3"><a:schemeClr val="accent5"/></a:lnRef><a:fillRef idx="0"><a:schemeClr val="accent5"/></a:fillRef><a:effectRef idx="2"><a:schemeClr val="accent5"/></a:effectRef><a:fontRef idx="minor"><a:schemeClr val="tx1"/></a:fontRef></wps:style><wps:bodyPr/></wps:wsp></a:graphicData></a:graphic><wp14:sizeRelH relativeFrom="margin"><wp14:pctWidth>0</wp14:pctWidth></wp14:sizeRelH><wp14:sizeRelV relativeFrom="margin"><wp14:pctHeight>0</wp14:pctHeight></wp14:sizeRelV></wp:anchor></w:drawing></mc:Choice><mc:Fallback><w:pict><v:line w14:anchorId="04485610" id="Straight Connector 3" o:spid="_x0000_s1026" style="position:absolute;z-index:251660288;visibility:visible;mso-wrap-style:square;mso-width-percent:0;mso-height-percent:0;mso-wrap-distance-left:9pt;mso-wrap-distance-top:0;mso-wrap-distance-right:9pt;mso-wrap-distance-bottom:0;mso-position-horizontal:absolute;mso-position-horizontal-relative:page;mso-position-vertical:absolute;mso-position-vertical-relative:text;mso-width-percent:0;mso-height-percent:0;mso-width-relative:margin;mso-height-relative:margin" from="-5.9pt,13.7pt" to="620.1pt,13.7pt" o:gfxdata="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&#xA;" strokecolor="#335ba3" strokeweight="1pt"><v:stroke joinstyle="miter"/><v:shadow on="t" color="black" opacity="26214f" origin=",-.5" offset="0,3pt"/><w10:wrap anchorx="page"/></v:line></w:pict></mc:Fallback></mc:AlternateContent></w:r>
<w:r w:rsidR="008453E8"><w:t xml:space="preserve">Customer Ref. – No.  </w:t></w:r>
<w:r w:rsidR="00BB3259"><w:t xml:space="preserve"> </w:t></w:r>
<w:r w:rsidR="00F972A0" w:rsidRPr="00BB1CB1"><w:rPr><w:i/></w:rPr><w:t>&lt;</w:t></w:r>
<w:proofErr w:type="spellStart"/><w:r w:rsidR="00F972A0" w:rsidRPr="00BB1CB1"><w:rPr><w:i/></w:rPr><w:t>CustRef</w:t></w:r>
<w:proofErr w:type="spellEnd"/><w:r w:rsidR="00F972A0" w:rsidRPr="00BB1CB1"><w:rPr><w:i/></w:rPr><w:t>&gt;</w:t></w:r>
<w:r w:rsidR="00F909DF"><w:tab/></w:r>
<w:r w:rsidR="00DE1633"><w:rPr><w:sz w:val="16"/></w:rPr><w:t>Mahwah</w:t></w:r>
<w:r w:rsidR="0029773E"><w:rPr><w:sz w:val="16"/></w:rPr><w:t>,</w:t></w:r>
<w:r w:rsidR="00DE1633"><w:rPr><w:sz w:val="16"/></w:rPr><w:t xml:space="preserve"> NJ</w:t></w:r>
<w:r w:rsidR="00EE3F20" w:rsidRPr="00EE3F20"><w:rPr><w:sz w:val="16"/></w:rPr><w:t xml:space="preserve"> </w:t></w:r>
<w:r w:rsidR="0029773E"><w:rPr><w:sz w:val="16"/></w:rPr><w:t>-</w:t></w:r>
<w:r w:rsidR="00EE3F20" w:rsidRPr="00EE3F20"><w:rPr><w:sz w:val="16"/></w:rPr><w:t xml:space="preserve"> </w:t></w:r>
<w:r w:rsidR="00F972A0"><w:rPr><w:sz w:val="16"/></w:rPr><w:t>&lt;Date&gt;</w:t></w:r>
<w:r w:rsidR="0037430D" w:rsidRPr="00EE3F20"><w:rPr><w:b/><w:sz w:val="10"/></w:rPr><w:t xml:space="preserve"> </w:t></w:r>
</w:p></w:hdr>

我发现您发布的代码有 3 个问题,但我不确定为什么您只在输出多张图像时才会看到错误。

第一期是DocPropertiesIdId 属性 在文档中的所有 DocProperties 中应该是唯一的。

new DW.DocProperties
{
    Id = 1U, //this should be unique amongst ALL DocProperties within the document
    Name = tag // Make sure all of the images have a different name
},

第二期很相似;每个 NonVisualDrawingPropertiesId 在每个 NonVisualDrawingProperties 实例中也应该是唯一的。

请注意,在这两种情况下,您都需要这些值与 header 中已经存在的值不同。从您发布的 header XML 可以看到您已经拥有这些属性的实例:

<wp:docPr id="1" name="NormalGraph2" />

<pic:cNvPr id="0" name="NormalGraph2.bmp" />

最后,我看到的第三个问题是在您添加 element 的代码中。在该代码中,您将找到包含 tagParagraph,然后将 Paragraph 附加到现有的 ParagraphParagraph 不允许是另一个 Paragraph 的 child。相反,您应该将 Run 添加到现有的 Paragraph 中,如下所示:

wordDoc.MainDocumentPart.Document.Body.Elements<Paragraph>().FirstOrDefault(f => f.InnerText.Contains(tag))?.AppendChild(new Run(element));

或者,如果您需要单独的段落,则在标签 Paragraph 之后针对同一 Parent 节点添加 Paragraph

var tagNode = wordDoc.MainDocumentPart.Document.Body.Elements<Paragraph>().FirstOrDefault(f => f.InnerText.Contains(tag));
if (tagNode != null)
{
    tagNode.Parent.InsertAfter(new Run(element), tagNode);
}

这是我目前基于此线程中的建议的解决方案! 第一种方法给我参考 ID。如果我想多次添加图像,可以重复使用此 id,但每次插入图像都应获得唯一的 ID:

AddImageToBody(_imgKReferenceID, $"imgOK{creditNr}", 60, 60, (UInt32)(counter + 100)

public static string InsertAPicture(MainDocumentPart mainPart, string fileName)
{
    try
    {
        ImagePart imagePart = mainPart.AddImagePart(ImagePartType.Jpeg);

        using (FileStream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
        {
            imagePart.FeedData(stream);
        }
        return mainPart.GetIdOfPart(imagePart);
    }
    catch (Exception ex)
    {
        Logger.Log.Error(ex);
        return "";
    }

}

internal static Drawing AddImageToBody(string relationshipId, string name , int w = 60, int h = 60, UInt32 id1=1U, UInt32 id2 = 0U)
{
    System.Drawing.Size size = new System.Drawing.Size(w, h);

    Int64Value width = size.Width/2 * 9525;
    Int64Value height = size.Height/2 * 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)id1,
                Name = $"{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)id2,
                                Name = $"{name}"
                            },
                            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 = 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"
        });

    return draw;

}