Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6789329
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 26, 20262026-05-26T17:35:27+00:00 2026-05-26T17:35:27+00:00

I am using OpenXML to insert an image into my document. The code provided

  • 0

I am using OpenXML to insert an image into my document. The code provided by Microsoft works, but makes the image much smaller:

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)
        {
            // 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 = "http://schemas.openxmlformats.org/drawingml/2006/picture" })
                     )
                     {
                         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.AppendChild(new Paragraph(new Run(element)));
        }

I need to make the image its original size. How can I do this? (I have googled how to do this outside of this process, but that is not what I am looking for. I have to assume that there are some sort of size properties inside of the given code).

Edit: Updated Code (still not working)

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), fileName);
    }
}
private static void AddImageToBody(WordprocessingDocument wordDoc, string relationshipId, string fileName)
{

    var img = new BitmapImage(new Uri(fileName, UriKind.RelativeOrAbsolute));
    var widthPx = img.PixelWidth;
    var heightPx = img.PixelHeight;
    var horzRezDpi = img.DpiX;
    var vertRezDpi = img.DpiY;
    const int emusPerInch = 914400;
    const int emusPerCm = 360000;
    var maxWidthCm = 16.51;
    var widthEmus = (long)(widthPx / horzRezDpi * emusPerInch);
    var heightEmus = (long)(heightPx / vertRezDpi * emusPerInch);
    var maxWidthEmus = (long)(maxWidthCm * emusPerCm);
    if (widthEmus > maxWidthEmus)
    {
        var ratio = (heightEmus * 1.0m) / widthEmus;
        widthEmus = maxWidthEmus;
        heightEmus = (long)(widthEmus * ratio);
    }

    // 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 = widthEmus, Cy = heightEmus }),
                                 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"
             });

    // Append the reference to body, the element should be in a Run.
    wordDoc.MainDocumentPart.Document.Body.AppendChild(new Paragraph(new Run(element)));
}
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-26T17:35:28+00:00Added an answer on May 26, 2026 at 5:35 pm

    The sizes, in EMUs (English Metric Unit — read this for a good explanation), are set in the Extents (the Cx and Cy).
    In order to get a pic into a DocX I usually do it like so:

    1. Get the image’s dimensions and resolution
    2. Compute the image’s width in EMUs: wEmu = imgWidthPixels / imgHorizontalDpi * emuPerInch
    3. Compute the image’s height in EMUs: hEmu = imgHeightPixels / imgVerticalDpi * emuPerInch
    4. Compute the max page width in EMUs (I’ve found that if the image is too wide, it won’t show)
    5. If the image’s width in EMUs is greater than the max page width’s, I scale the image’s width and height so that the width of image is equal to that of the page (when I say page, I’m referring to the “usable” page, that is minus the margins):

      var ratio = hEmu / wEmu;
      wEmu = maxPageWidthEmu;
      hEmu = wEmu * ratio;

    6. I then use the width as the value of Cx and height as the value of Cy, both in the DW.Extent and in the A.Extents (of the A.Transform2D of the PIC.ShapeProperties).

    Note that the emuPerInch value is 914400.
    I have this running (in a service) but I don’t have the code with me right now.

    UPDATE

    This is the code I use:

    var img = new BitmapImage(new Uri(fileName, UriKind.RelativeOrAbsolute));
    var widthPx = img.PixelWidth;
    var heightPx = img.PixelHeight;
    var horzRezDpi = img.DpiX;
    var vertRezDpi = img.DpiY;
    const int emusPerInch = 914400;
    const int emusPerCm = 360000;
    var widthEmus = (long)(widthPx / horzRezDpi * emusPerInch);
    var heightEmus = (long)(heightPx / vertRezDpi * emusPerInch);
    var maxWidthEmus = (long)(maxWidthCm * emusPerCm);
    if (widthEmus > maxWidthEmus) {
      var ratio = (heightEmus * 1.0m) / widthEmus;
      widthEmus = maxWidthEmus;
      heightEmus = (long)(widthEmus * ratio);
    }
    

    In my case, my page’s measures are in cm, hence the emusPerCm you see above.

    UPDATE 2 (to answer @andw)

    To have the file locked during the minimum possible time, open it with a FileStream and pass the resulting stream to the StreamSource property of the BitmapImage:

    var img = new BitmapImage();
    using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read)) {
        img.BeginInit();
        img.StreamSource = fs;
        img.EndInit();
    }
    // The file is now unlocked
    var widthPx = img.PixelWidth;
    ...
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I'm trying to merge two docx-documents into one docx-document using OpenXML SDK 2.0. The
i have existing code that generates a spreadsheet from excel using OpenXML. It works
I did insert an image using the OpenXML SDK API .. however i can
I am creating a Microsoft Word document using the OpenXml library. Most of what
I have created an Excel document using OpenXml SDK 2.0, now I have to
From aspx page, I dynamically add paragraphs to a word document using OpenXml SDK.
I have a xml document as string. I need to insert the data into
HI, I'm trying to create a word document in C++ using OpenXML SDK, I'm
I'm loading an XML in SQL using OpenXML while declaring the variable the max
Folks, We have been using OpenXml APIs found in System.IO.Packaging for creating a package

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.