Image Insert Corrupting the Document RRS feed

  • Question

  • Hi,

    I need to insert images in different pages. All the images will be different and it will be inserted in to different location like table cells.

    I have tried the example in the MSDN  link -

    But after inserting the document is getting corrupted. Insertion of one image with the same code works , but i try inserting another image document is getting corrupted. RelationshipID is passed different from addImagePart creates new relationshipID.

    I tried opening recovered docuemnt and the corrupted document in Open XMl SDk 2.5 Productivity Tool  and i Could see the images are stored in /media/ folder in the corrupted document and /word/media/ in the recovered document. Is this would be the reason for getting corrupted?

    Pleas help me with this as i'm stuck with this for some time

    I'm using  OS: Windows 8, OpenXMLSDK 2.5 and office 2013



    • Edited by Swaroopkb Wednesday, December 4, 2013 10:57 AM
    Wednesday, December 4, 2013 10:52 AM


  • Hi,

    If I want to develop with OpenXML SDK, I will use OpenXML SDK Productivity Tool to find the difference between original document and destination document.

    If you want to insert images in different pages, after inserting, you should add a paragraph contains Break appending to the body:

    I changed the sample from MSDN which you provided.

    Here is the whole sample (Windows console application),  it works fine for me:

    using System.IO; using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Wordprocessing; using A = DocumentFormat.OpenXml.Drawing; using DW = DocumentFormat.OpenXml.Drawing.Wordprocessing; using PIC = DocumentFormat.OpenXml.Drawing.Pictures; using System.Collections; namespace OpenXMLWordInsertIMG { class Program { static void Main(string[] args) { string document = @"E:\TestWord.docx"; ArrayList piclist = new ArrayList(); string fileName = @"E:\1.jpg"; string fileName1 = @"E:\2.jpg"; piclist.Add(fileName); piclist.Add(fileName1); for (int i = 0; i < piclist.Count; i++) { InsertAPicture(document, piclist[i].ToString()); } } public static void InsertAPicture(string document, string fileName) { using (WordprocessingDocument wordprocessingDocument = WordprocessingDocument.Open(document, true)) { MainDocumentPart mainPart = wordprocessingDocument.MainDocumentPart; ImagePart imagePart = mainPart.AddImagePart(ImagePartType.Jpeg); using (FileStream stream = new FileStream(fileName, FileMode.Open)) { imagePart.FeedData(stream); } AddImageToBody(wordprocessingDocument, mainPart.GetIdOfPart(imagePart)); } } private static void AddImageToBody(WordprocessingDocument wordDoc, string relationshipId) { wordDoc.MainDocumentPart.Document.Body.InsertBefore<Paragraph>(GenerateParagraph(), wordDoc.MainDocumentPart.Document.Body.GetFirstChild<SectionProperties>()); // Define the reference of the image. var element = new Drawing( new DW.Inline( new DW.Extent() { Cx = 990000L, Cy = 792000L }, new DW.EffectExtent() { LeftEdge = 0L, TopEdge = 0L, RightEdge = 0L, BottomEdge = 0L }, new DW.DocProperties() { Id = (UInt32Value)1U, Name = "Picture 1" }, 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 = "New Bitmap Image.jpg" }, 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 = "" }) ) { DistanceFromTop = (UInt32Value)0U, DistanceFromBottom = (UInt32Value)0U, DistanceFromLeft = (UInt32Value)0U, DistanceFromRight = (UInt32Value)0U, EditId = "50D07946" }); // Append the reference to body, the element should be in a Run. wordDoc.MainDocumentPart.Document.Body.InsertBefore<Paragraph>(new Paragraph(new Run(element)), wordDoc.MainDocumentPart.Document.Body.GetFirstChild<SectionProperties>()); }

    public static Paragraph GenerateParagraph() { Paragraph paragraph1 = new Paragraph(); Run run1 = new Run(); Break break1 = new Break() { Type = BreakValues.Page }; run1.Append(break1); paragraph1.Append(run1); return paragraph1; } } }

    Hope it will give you help.

    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    Friday, December 6, 2013 3:57 PM