title: How to write an image from byte[] into MS WORD using C# Windows application
body: <p>I have tried to write data from <code>FileStream</code>, <code>StreamWriter</code> to a word file. </p>
  
  <p>It's working fine when the data is text format(using <code>StreamWriter</code>). But when I tried the same with <code>Binarywriter</code> (for writing image to word doc) it's writing incorrectly to the word document.</p>
  
  <p>In below code <code>lstOrderedSpares[index].SparePicture</code> is the byte array containing the image data. </p>
  
  <p>I need a solution without OPENXML.</p>
  
  <p>This is what I have tried so far :</p>
  
  <p>Here is my button click where i am initializing the data to classes and <code>List</code></p>
  
  <pre><code> private void btnCreateQuotation_Click(object sender, EventArgs e)
      {
          try
          {
              Quotation aQuotation = new Quotation();
              aQuotation.QuotationId = quotationId;
              aQuotation.QuotationDate = lblQuotationDateValue.Text;
  
          //Reading from Datagridview and adding to List&lt;Spare&gt;
  
              List&lt;Spare&gt; lstOrderedSpares = new List&lt;Spare&gt;();
              if (dataGridView1.Rows.Count &gt; 0)
              {
                  foreach (DataGridViewRow dr in dataGridView1.Rows)
                  {
                      Spare aSpare = new Spare();
                      aSpare.SapreSerialNumber = dr.Cells["SlNo"].Value.ToString();
                      aSpare.SparePartId = dr.Cells["SparePartID"].Value.ToString();
                      aSpare.SparePicture = (byte[])dr.Cells["SparePicture"].Value;
                      aSpare.SpareDescription = dr.Cells["SpareDescription"].Value.ToString();
                      aSpare.EURPrice = Convert.ToDouble(dr.Cells["EURPrice"].Value.ToString());
                      aSpare.Quantity = Convert.ToDouble(dr.Cells["Quantity"].Value.ToString());
                      aSpare.TotalPrice = Convert.ToDouble(dr.Cells["TotalPrice"].Value.ToString());
                      aSpare.DeliveryCharge = Convert.ToDouble(txtDeliveryCharge.Text.Trim());
                      aSpare.Vat = txtVAT.Text.Trim();
                      aSpare.INRPrice = Convert.ToDouble(dr.Cells["INRPrice"].Value.ToString());
                      lstOrderedSpares.Add(aSpare);
                  }
              }
  
              Contact aContact = new Contact();
              aContact.CompanyName = txtCustomerName.Text.Trim();
              aContact.ContactName = cmbContactPersonName.Text;
              aContact.ContactId = Convert.ToInt32(lblContactPeronIdValue.Text);
              aContact.CompanyId = Convert.ToInt32(lblCustomerIDValue.Text);
  
              string fileName = "SparePart_" + aQuotation.QuotationId + "_";
              string fileNameWithPath = "C:\\Quotations\\SpareQuotations\\" + fileName;
              if (isaddedtodb)
              {
                  CreateDocument(aQuotation, aContact, lstOrderedSpares, fileNameWithPath);
  
                  fileNameWithPath = fileNameWithPath + aContact.CompanyName.Trim() + ".doc";
                  btnCreateQuotation.Visible = false;
                  this.Hide();
                  //start ms word to open the document 
                  System.Diagnostics.Process.Start(fileNameWithPath);
              }
          }
          catch (Exception objEx)
          {
  
          }
      }
  </code></pre>
  
  <p>and here is the <code>CreateDocument</code> Method which writes data to the word document.</p>
  
  <pre><code> private void CreateDocument(Quotation aQuotation, Contact aContact,
                                  List&lt;Spare&gt; lstOrderedSpares, string fileNameWithPath)
      {
          try
          {
              _Application oWord = new Microsoft.Office.Interop.Word.Application();
              _Document oDoc = oWord.Documents.Add();
              oWord.Visible = true;
  
  
              //modify secondparameter to include customer name in file name 
              fileNameWithPath = fileNameWithPath + aContact.CompanyName.Trim() + ".doc";
  
              //Insert text
              Range rng = oDoc.Range();
              rng.Text = "TSV/" + aQuotation.EnquiredBy.ToString() + "/JS/" + aQuotation.QuotationId
                      + "/SPARES" + "\t" + "\t" + "\t" + "\t" + "\t" + aQuotation.QuotationDate;
              //oWord.Selection.EndKey();
              //oWord.Selection.TypeParagraph();
              rng.InsertBreak();
              rng.Text = "To ,";
              rng.InsertBreak();
              rng.Text = "M/s. " + aContact.CompanyName + ",";
              rng.InsertBreak();
              rng.Text = aContact.AddressLine1 + ",";
              rng.InsertBreak();
              rng.Text = aContact.AddressLine2 + ",";
              rng.InsertBreak();
              rng.Text = aContact.City + "," + aContact.State + ",";
              rng.InsertBreak();
              rng.Text = aContact.Country + "-" + aContact.PinNo;
              rng.InsertBreak();
              rng.Text = "Phone : " + aContact.PhoneNo;
              rng.InsertBreak();
              rng.Text = "Mobile No : " + aContact.MobileNo;
              rng.InsertBreak();
              rng.InsertBreak();
  
              //Salutation and subject
  
              rng.Text = "\t" + "\t" + "Kind Attention : " + aContact.ContactName;
              rng.InsertBreak();
              rng.Text = "Dear Sir,";
              rng.InsertBreak();
              rng.Text = "Sub: " + aQuotation.Subject;
              rng.InsertBreak();
              rng.Text = "Ref: your email enquiry dt: " + aQuotation.EmailEnquiredDate;
              rng.InsertBreak();
              rng.Text = "We thank you for your valuable email enquiry dt. " + aQuotation.EmailEnquiredDate
                               + " for supply of spares for your .........Capacity,"
                               + " fabrik nos Sl. No :..................";
              rng.InsertBreak();
              rng.InsertBreak();
              int europeancount = 0;
              for (int index = 0; index &lt; lstOrderedSpares.Count; index++)
              {
                  if (lstOrderedSpares[index].INRPrice == 0.00)
                  {
                      europeancount++;
                  }
              }
  
              rng.Text = "A) We wish to inform you that the following " + europeancount +
                               " spares can be supplied directly by in Euros.";
              rng.InsertBreak();
              rng.InsertBreak();
  
              int tempslno1 = 0;
              for (int index = 0; index &lt; lstOrderedSpares.Count; index++)
              {
                  if (lstOrderedSpares[index].INRPrice == 0.00)
                  {
                      tempslno1++;
                      rng.Text = tempslno1 + "." + lstOrderedSpares[index].SpareDescription.ToUpper() +
                                   " : ARTICLE NO: " + lstOrderedSpares[index].SparePartId + "\t" +
                                   Math.Round(lstOrderedSpares[index].EURPrice) + lblEuroSymbol.Text + "(" +
                      new NumberToEnglish().changeCurrencyToWords(Math.Round(lstOrderedSpares[index].EURPrice)) + ")";
  
                      //To insert a picture from a byte array you need to use the Clipboard to paste it in
                      object endOfContent = oDoc.Content.End - 1;
                      Range rngPic = oDoc.Range(endOfContent);
                      //Here is the trick to convert the ByteArray into an image and paste it in the document
                      Image sparePicture = ByteArrayToImage(lstOrderedSpares[index].SparePicture);
                      Clipboard.SetDataObject(sparePicture);
                      rngPic.Paste();
                      rng.InsertBreak();
                  }
              }
              rng.InsertBreak();
              rng.InsertBreak();
              rng.Text = "Price Quoted Ex-works .";
              rng.InsertBreak();
              rng.Text = "Freight/Courier,Insurance,duties,any and all other expenses extra to " +
                               "customers account.";
              rng.InsertBreak();
              rng.InsertBreak();
              rng.Text = "HOW TO ORDER :- Please register your order in favour of ....";
              rng.InsertBreak();
              rng.Text = "PAYMENT :- Full payment in advance against proforma invoice from ...." + " through their bankers ..... ";
              rng.InsertBreak();
              rng.InsertBreak();
              rng.Text = "Delivery / Dispatch: 2 Weeks from the date of receipt of payment.";
              rng.InsertBreak();
              rng.Text = "In case if you have account with ...then kindly mention the account number, " +
                               "since it will be economical if send via ....";
              rng.Text = "Please provide your 'IEC Code number'.";
              rng.InsertBreak();
              rng.InsertBreak();
              rng.Text = "B) We wish to inform you that the following spare can be supplied from ex-stock " + "our Office in INR";
              rng.InsertBreak();
              int tempslno2 = 0;
              for (int index = 0; index &lt; lstOrderedSpares.Count; index++)
              {
  
                  if (lstOrderedSpares[index].INRPrice != 0.00)
                  {
                      tempslno2++;
                      rng.Text = tempslno2 + "." + lstOrderedSpares[index].SpareDescription.ToUpper() +
                                   " : ARTICLE NO: " + lstOrderedSpares[index].SparePartId + "\t" +
                                   Math.Round(lstOrderedSpares[index].INRPrice) + " " + lblINRSymbol.Text + "(" +
                      new NumberToEnglish().changeNumericToWords(Math.Round(lstOrderedSpares[index].INRPrice)) + ")";
  
                      //To insert a picture from a byte array you need to use the Clipboard to paste it in
                      object endOfContent = oDoc.Content.End - 1;
                      Range rngPic = oDoc.Range(endOfContent);
                      //Here is the trick to convert the ByteArray into an image and paste it in the document
                      Image sparePicture = ByteArrayToImage(lstOrderedSpares[index].SparePicture);
                      Clipboard.SetDataObject(sparePicture);
                      rngPic.Paste();
                      rng.InsertBreak();
                  }
              }
  
              rng.Text = "Price quoted ex-our office";
              rng.InsertBreak();
              rng.Text = "Taxes: VAT TNGST @ " + lstOrderedSpares[0].Vat + "% extra";
              rng.InsertBreak();
              rng.Text = "Delivery/Despatch: on receipt of order along with payment";
              rng.Text = "Delivery/Courier Charges - extra " + lstOrderedSpares[0].DeliveryCharge.ToString() +
                              "/-";                
              rng.InsertBreak();
              rng.Text = "The order &amp; payment may please be released in favour of...";
              rng.InsertBreak();
              rng.InsertBreak();
              rng.Text = "Payment: Full payment in advance by way of Electronic Transfer as per following details :";
              rng.InsertBreak();
              rng.Text = "Current Account Number: ......";
              rng.InsertBreak();
              rng.Text = "IFSC Code: ..........";
              rng.InsertBreak();
              rng.Text = "Name of the account holder: .........";
              rng.InsertBreak();
  
              rng.Text = "\t" + "\t" + "\t" + "OR";
              rng.InsertBreak();
              rng.Text = "By way of Demand Draft";
              rng.InsertBreak();
              rng.InsertBreak();
              rng.Text = "Offer validity 30 days";
              rng.InsertBreak();
              rng.Text = "Thanking you and awaiting your valuable instructions to fulfill your needs well in time.";
              rng.InsertBreak();
              rng.InsertBreak();
              rng.Text = "Yours sincerely";
              rng.InsertBreak();
  
              oWord.Selection.EndKey();
              oWord.Selection.TypeParagraph();
  
              oDoc.SaveAs(fileNameWithPath);  //If you're creating a document
              oDoc.Close();
              oWord.Quit();
          }
          catch (Exception objEx)
          {
  
          }
      }
  
      public Image ByteArrayToImage(byte[] byteArrayIn)
      {
          MemoryStream ms = new MemoryStream(byteArrayIn);
          Image returnImage = Image.FromStream(ms);
          returnImage = ResizeImage(returnImage, new Size(30, 30));
          return returnImage;
      }
  
      public static Image ResizeImage(Image imgToResize, Size size)
      {
          return (Image)(new Bitmap(imgToResize, size));
      }
  </code></pre>