title: How to insert image into header of OpenXML Word document?
body: <p>My OpenXML Word document generation project requires text, tables, and images.  But first, <strong>I need a document header with a logo (image) in it.</strong></p>
  
  <p>I've used the Microsoft example for creating headers and footers at 
  <a href="http://msdn.microsoft.com/en-us/library/office/ee355228%28v=office.12%29.aspx">Generating Documents with Headers and Footers in Word 2007 by Using the Open XML SDK 2.0 for Microsoft Office</a>, and text headers work just fine, but the images show up in the header with the broken image icon, a <strong>correctly sized border</strong>, and the message "This image cannot currently be displayed."  Also, I can load the selected image into the document body just fine.  Here's how I create the ImagePart:</p>
  
  <pre><code>// Create AG logo part.
  _agLogoPart = mainDocumentPart.AddImagePart(ImagePartType.Jpeg);
  using (FileStream stream = new FileStream(_agLogoFilename, FileMode.Open))
  {
      _agLogoPart.FeedData(stream);
  }
  _agLogoRel = mainDocumentPart.GetIdOfPart(_agLogoPart);
  </code></pre>
  
  <p>The images are loaded with a LoadImage method, derived from the Microsoft example, but adding parameters for width and height, and returning a Drawing object:</p>
  
  <pre><code>private static Drawing LoadImage(string relationshipId,
                               string filename,
                               string picturename,
                               double inWidth,
                               double inHeight)
  {
  double emuWidth = Konsts.EmusPerInch * inWidth;
  double emuHeight = Konsts.EmusPerInch * inHeight;
  
  var element = new Drawing(
      new DW.Inline(
      new DW.Extent { Cx = (Int64Value)emuWidth, Cy = (Int64Value)emuHeight },
      new DW.EffectExtent { LeftEdge = 0L, TopEdge = 0L, RightEdge = 0L, BottomEdge = 0L },
      new DW.DocProperties { Id = (UInt32Value)1U, Name = picturename },
      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 = filename },
      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 = (Int64Value)emuWidth, Cy = (Int64Value)emuHeight }),
      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 element;
  }
  </code></pre>
  
  <p>Using this, the following code works, loading an image anywhere into the body I want:</p>
  
  <pre><code>Paragraph paraImage = new Paragraph(new Run(LoadImage(_genomeImageRel, _genomeImageFilename, "name" + _genomeImageRel, 7.5, 2.925)));
  body.AppendChild(paraImage);
  </code></pre>
  
  <p>And the following code does not work to put a logo image in the header:</p>
  
  <pre><code>private static Header GeneratePageHeaderPart(string headerText)
  {
      Header hdr = new Header(new Paragraph(new Run(LoadImage(_agLogoRel, _agLogoFilename, "name" + _agLogoRel, 2.57, 0.73))));
      return hdr;
  }
  </code></pre>
  
  <p>I suspect I'm doing something very subtle incorrectly, because I can load the image anywhere but in the header.  Can anyone advise?</p>