问题描述
我试图从的FileStream
,的StreamWriter
数据写入到一个Word文件。
这是当数据是文本格式工作正常(使用的StreamWriter
)。但是,当我试图同的BinaryWriter
(写入图像Word文档),它错误地写入到Word文档。
在低于code lstOrderedSpares [指数] .SparePicture
是包含图像数据的字节数组。
我需要在不OPENXML一个解决方案。
这是我试过到目前为止:
下面是我的按钮,单击我的初始化数据类和列表
私人无效btnCreateQuotation_Click(对象发件人,EventArgs的)
{
尝试
{
报价aQuotation =新报价();
aQuotation.QuotationId = quotationId;
aQuotation.QuotationDate = lblQuotationDateValue.Text;
//读取从DataGridView,并增加了名单,其中,备件和GT;
名单<备件和GT; lstOrderedSpares =新的名单,其中,备件和GT;();
如果(dataGridView1.Rows.Count大于0)
{
的foreach(在dataGridView1.Rows的DataGridViewRow博士)
{
饶aSpare =新的备用();
aSpare.Sa preSerialNumber = dr.Cells [SlNo] Value.ToString()。
aSpare.SparePartId = dr.Cells [SparePartID] Value.ToString()。
aSpare.SparePicture =(字节[])dr.Cells [SparePicture]值。
aSpare.SpareDescription = dr.Cells [SpareDescription] Value.ToString()。
aSpare.EURPrice = Convert.ToDouble(dr.Cells [EURPrice] Value.ToString());
aSpare.Quantity = Convert.ToDouble(dr.Cells [数量] 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);
}
}
联系aContact =新联系();
aContact.CompanyName = txtCustomerName.Text.Trim();
aContact.ContactName = cmbContactPersonName.Text;
aContact.ContactId = Convert.ToInt32(lblContactPeronIdValue.Text);
aContact.CompanyId = Convert.ToInt32(lblCustomerIDValue.Text);
字符串文件名=SparePart_+ aQuotation.QuotationId +_;
字符串fileNameWithPath =C:\\ \\语录\\ SpareQuotations+文件名;
如果(isaddedtodb)
{
CreateDocument(aQuotation,aContact,lstOrderedSpares,fileNameWithPath);
fileNameWithPath = fileNameWithPath + aContact.CompanyName.Trim()+的.doc;
btnCreateQuotation.Visible = FALSE;
this.Hide();
//启动MS Word中打开该文档
System.Diagnostics.Process.Start(fileNameWithPath);
}
}
赶上(例外objEx)
{
}
}
和这里是 CreateDocument
方法,将数据写入到Word文档。
私人无效CreateDocument(报价aQuotation,联系aContact,
名单<备件和GT; lstOrderedSpares,串fileNameWithPath)
{
尝试
{
_Application oWord =新Microsoft.Office.Interop.Word.Application();
_document ODOC = oWord.Documents.Add();
oWord.Visible = TRUE;
//修改secondparameter中包括文件名客户名称
fileNameWithPath = fileNameWithPath + aContact.CompanyName.Trim()+的.doc;
//插入文本
范围RNG = oDoc.Range();
rng.Text =TSV /+ aQuotation.EnquiredBy.ToString()+/ JS /+ aQuotation.QuotationId
+/备件+\ t+\ t+\ t+\ t+\ t+ aQuotation.QuotationDate;
//oWord.Selection.EndKey();
//oWord.Selection.TypeParagraph();
rng.InsertBreak();
rng.Text =到;
rng.InsertBreak();
rng.Text =米/秒。+ 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 =电话:+ aContact.PhoneNo;
rng.InsertBreak();
rng.Text =手机号码:+ aContact.MobileNo;
rng.InsertBreak();
rng.InsertBreak();
//称呼和主题
rng.Text =\ t+\ t+亲切关怀+ aContact.ContactName;
rng.InsertBreak();
rng.Text =尊敬的先生,;
rng.InsertBreak();
rng.Text =子:+ aQuotation.Subject;
rng.InsertBreak();
rng.Text =参考:您的电子邮件询问DT:+ aQuotation.EmailEnquiredDate;
rng.InsertBreak();
rng.Text =感谢您的宝贵电子邮件询问DT。+ aQuotation.EmailEnquiredDate
+供应备件为你.........能力,
+FABRIK号Sl的编号:..................;
rng.InsertBreak();
rng.InsertBreak();
INT europeancount = 0;
对于(INT指数= 0;指数< lstOrderedSpares.Count;指数++)
{
如果(lstOrderedSpares [指数] .INRPrice == 0.00)
{
europeancount ++;
}
}
rng.Text =a)我们想通知你,下面的+ europeancount +
备件可以直接在欧元提供。
rng.InsertBreak();
rng.InsertBreak();
INT tempslno1 = 0;
对于(INT指数= 0;指数< lstOrderedSpares.Count;指数++)
{
如果(lstOrderedSpares [指数] .INRPrice == 0.00)
{
tempslno1 ++;
rng.Text = tempslno1 +。 + lstOrderedSpares [指数] .SpareDescription.ToUpper()+
:产品编号:+ lstOrderedSpares [指数] .SparePartId +\ t+
Math.Round(lstOrderedSpares [指数] .EURPrice)+ lblEuroSymbol.Text +(+
新NumberToEnglish()changeCurrencyToWords(Math.Round(lstOrderedSpares [指数] .EURPrice))+);
//从一个字节数组中插入的图片,你需要使用剪贴板粘贴
对象endOfContent = oDoc.Content.End - 1;
范围rngPic = oDoc.Range(endOfContent);
//这是使用方法来转换的ByteArray成图像,并粘贴到文档中
图片sparePicture = ByteArrayToImage(lstOrderedSpares [指数] .SparePicture);
Clipboard.SetDataObject(sparePicture);
rngPic.Paste();
rng.InsertBreak();
}
}
rng.InsertBreak();
rng.InsertBreak();
rng.Text =所报价格出厂价。
rng.InsertBreak();
rng.Text =货运/快递,保险,关税,任何和额外的所有其他费用+
客户帐户。;
rng.InsertBreak();
rng.InsertBreak();
rng.Text =HOW TO ORDER: - 请赞成注册您的订单......;
rng.InsertBreak();
rng.Text =付款方式: - 全部预付款免受....形式发票+通过他们的银行家......;
rng.InsertBreak();
rng.InsertBreak();
rng.Text =交付/调度:在收到付款之日起2个星期。
rng.InsertBreak();
rng.Text =万一要是你有...帐户,然后亲切地提帐号,+
因为这将是经济的,如果通过送......;
rng.Text =请提供你的'IEC code号'。
rng.InsertBreak();
rng.InsertBreak();
rng.Text =b)我们想通知你,以下备件可以从前股票提供+在INR我们的办公室;
rng.InsertBreak();
INT tempslno2 = 0;
对于(INT指数= 0;指数< lstOrderedSpares.Count;指数++)
{
如果(lstOrderedSpares [指数] .INRPrice!= 0.00)
{
tempslno2 ++;
rng.Text = tempslno2 +。 + lstOrderedSpares [指数] .SpareDescription.ToUpper()+
:产品编号:+ lstOrderedSpares [指数] .SparePartId +\ t+
Math.Round(lstOrderedSpares [指数] .INRPrice)++ lblINRSymbol.Text +(+
新NumberToEnglish()changeNumericToWords(Math.Round(lstOrderedSpares [指数] .INRPrice))+);
//从一个字节数组中插入的图片,你需要使用剪贴板粘贴
对象endOfContent = oDoc.Content.End - 1;
范围rngPic = oDoc.Range(endOfContent);
//这是使用方法来转换的ByteArray成图像,并粘贴到文档中
图片sparePicture = ByteArrayToImage(lstOrderedSpares [指数] .SparePicture);
Clipboard.SetDataObject(sparePicture);
rngPic.Paste();
rng.InsertBreak();
}
}
rng.Text =价格报价前我们的办公室;
rng.InsertBreak();
rng.Text =税:增值税TNGST @+ lstOrderedSpares [0] .Vat +%的额外;
rng.InsertBreak();
rng.Text =交货/发货:收到订单与支付;
rng.Text =送货/快递费用 - 额外的+ lstOrderedSpares [0] .DeliveryCharge.ToString()+
/ - ;
rng.InsertBreak();
rng.Text =命令和放大器;付款可能,请释放有利于...;
rng.InsertBreak();
rng.InsertBreak();
rng.Text =付款方式:全部预付款由电子转账按以下详细信息的方式:;
rng.InsertBreak();
rng.Text =当前账号:......;
rng.InsertBreak();
rng.Text =IFSC code:..........;
rng.InsertBreak();
rng.Text =账户持有人名称:.........
rng.InsertBreak();
rng.Text =\ t+\ t+\ t+或;
rng.InsertBreak();
rng.Text =通过汇票的方式;
rng.InsertBreak();
rng.InsertBreak();
rng.Text =要约有效期提前30天;
rng.InsertBreak();
rng.Text =感谢你,等待你宝贵的指导,以满足您的需求以及时间。
rng.InsertBreak();
rng.InsertBreak();
rng.Text =此致;
rng.InsertBreak();
oWord.Selection.EndKey();
oWord.Selection.TypeParagraph();
oDoc.SaveAs(fileNameWithPath); //如果你要创建一个文档
oDoc.Close();
oWord.Quit();
}
赶上(例外objEx)
{
}
}
公众形象ByteArrayToImage(byte []的byteArrayIn)
{
MemoryStream的毫秒=新的MemoryStream(byteArrayIn);
图像returnImage = Image.FromStream(毫秒);
returnImage = ResizeImage(returnImage,新的大小(30,30));
返回returnImage;
}
公共静态图像ResizeImage(图片imgToResize,尺寸大小)
{
回报(图)(新位图(imgToResize,大小));
}
您需要使用MS Word对象模型将图片添加到Word文档。:要做到这一点参考的Microsoft.Office.Interop.Word NET的DLL在您的项目,并尝试这个code:
使用的Microsoft.Office.Interop.Word;
使用System.IO;
私人无效btnCreateQuotation_Click(对象发件人,EventArgs的)
{
VAR spareList =新的名单,其中,备件和GT;();
spareList.Add(新备用{SparePicture = ImageToByteArray(Image.FromFile(@C:\ TEMP \ 11.png))});
spareList.Add(新备用{SparePicture = ImageToByteArray(Image.FromFile(@C:\ TEMP \ 1.png))});
CreateDocument(@C:\ TEMP \ MyWordDoc.docx,spareList);
}
公共无效CreateDocument(字符串docFilePath,名单,其中,备件和GT; lstOrderedSpares)
{
Microsoft.Office.Interop.Word._Application oWord =新Microsoft.Office.Interop.Word.Application();
Microsoft.Office.Interop.Word._Document ODOC = oWord.Documents.Add(); //如果你要创建一个文档
//Microsoft.Office.Interop.Word._Document ODOC = oWord.Documents.Open(docFilePath,只读:假的,可见的:真正的); //如果你打开一个文档
//要了解怎么回事,而填充Word文档设置可见=真
oWord.Visible = TRUE;
//插入文本
对象oMissing = System.Reflection.Missing.Value;
VAR oPara1 = oDoc.Content.Paragraphs.Add(REF oMissing);
oPara1.Range.Text =一个文本;
oPara1.Range.InsertParagraphAfter();
//这是使用方法插入来自字节数组到MS Word,你需要的图片
//转换的ByteArray成图像,并使用剪贴板粘贴到文档中
图像sparePicture = ByteArrayToImage(lstOrderedSpares [0] .SparePicture);
Clipboard.SetDataObject(sparePicture);
VAR oPara2 = oDoc.Content.Paragraphs.Add(REF oMissing);
oPara2.Range.Paste();
oPara2.Range.InsertParagraphAfter();
//插入一些文字
VAR oPara3 = oDoc.Content.Paragraphs.Add(REF oMissing);
oPara3.Range.Text =第二个文本+ Environment.NewLine;
oPara3.Range.InsertParagraphAfter();
sparePicture = ByteArrayToImage(lstOrderedSpares [1] .SparePicture);
Clipboard.SetDataObject(sparePicture);
VAR oPara4 = oDoc.Content.Paragraphs.Add(REF oMissing);
oPara4.Range.Paste();
oPara4.Range.InsertParagraphAfter();
oDoc.SaveAs(docFilePath); //如果你要创建一个文档
//oDoc.Save(); //如果你打开一个文档
oDoc.Close();
oWord.Quit();
}
公众形象ByteArrayToImage(byte []的byteArrayIn)
{
MemoryStream的毫秒=新的MemoryStream(byteArrayIn);
图像returnImage = Image.FromStream(毫秒);
返回returnImage;
}
//方法我用它来测试加载图像从磁盘转换为字节[]的和将它们插入到Word
公共字节[] ImageToByteArray(System.Drawing.Image对象imageIn)
{
byte []的结果= NULL;
使用(MemoryStream的毫秒=新的MemoryStream())
{
imageIn.Save(MS,System.Drawing.Imaging.ImageFormat.Png);
结果= ms.ToArray();
}
返回结果;
}
这是结果:
I have tried to write data from FileStream
, StreamWriter
to a word file.
It's working fine when the data is text format(using StreamWriter
). But when I tried the same with Binarywriter
(for writing image to word doc) it's writing incorrectly to the word document.
In below code lstOrderedSpares[index].SparePicture
is the byte array containing the image data.
I need a solution without OPENXML.
This is what I have tried so far :
Here is my button click where i am initializing the data to classes and List
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<Spare>
List<Spare> lstOrderedSpares = new List<Spare>();
if (dataGridView1.Rows.Count > 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)
{
}
}
and here is the CreateDocument
Method which writes data to the word document.
private void CreateDocument(Quotation aQuotation, Contact aContact,
List<Spare> 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 < 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 < 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 < 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 & 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));
}
You need to use the MS Word Object Model to add pictures into a word document. To do this reference the Microsoft.Office.Interop.Word .Net DLL in your project and try this code:
using Microsoft.Office.Interop.Word;
using System.IO;
private void btnCreateQuotation_Click(object sender, EventArgs e)
{
var spareList = new List<Spare>();
spareList.Add(new Spare{ SparePicture = ImageToByteArray(Image.FromFile(@"C:\temp\11.png"))});
spareList.Add(new Spare { SparePicture = ImageToByteArray(Image.FromFile(@"C:\temp\1.png")) });
CreateDocument(@"C:\Temp\MyWordDoc.docx", spareList);
}
public void CreateDocument(string docFilePath, List<Spare> lstOrderedSpares)
{
Microsoft.Office.Interop.Word._Application oWord = new Microsoft.Office.Interop.Word.Application();
Microsoft.Office.Interop.Word._Document oDoc = oWord.Documents.Add(); //If you're creating a document
//Microsoft.Office.Interop.Word._Document oDoc = oWord.Documents.Open(docFilePath, ReadOnly: false, Visible: true); //If you're opening a document
//To see whats going on while populating the word document set Visible = true
oWord.Visible = true;
//Insert text
Object oMissing = System.Reflection.Missing.Value;
var oPara1 = oDoc.Content.Paragraphs.Add(ref oMissing);
oPara1.Range.Text = "First Text";
oPara1.Range.InsertParagraphAfter();
//Here is the trick to insert a picture from a byte array into MS Word you need to
//convert the ByteArray into an Image and using the Clipboard paste it into the document
Image sparePicture = ByteArrayToImage(lstOrderedSpares[0].SparePicture);
Clipboard.SetDataObject(sparePicture);
var oPara2 = oDoc.Content.Paragraphs.Add(ref oMissing);
oPara2.Range.Paste();
oPara2.Range.InsertParagraphAfter();
//Insert some more text
var oPara3 = oDoc.Content.Paragraphs.Add(ref oMissing);
oPara3.Range.Text = "Second Text" + Environment.NewLine;
oPara3.Range.InsertParagraphAfter();
sparePicture = ByteArrayToImage(lstOrderedSpares[1].SparePicture);
Clipboard.SetDataObject(sparePicture);
var oPara4 = oDoc.Content.Paragraphs.Add(ref oMissing);
oPara4.Range.Paste();
oPara4.Range.InsertParagraphAfter();
oDoc.SaveAs(docFilePath); //If you're creating a document
//oDoc.Save(); //If you're opening a document
oDoc.Close();
oWord.Quit();
}
public Image ByteArrayToImage(byte[] byteArrayIn)
{
MemoryStream ms = new MemoryStream(byteArrayIn);
Image returnImage = Image.FromStream(ms);
return returnImage;
}
//Method I use to test loading images from disk into byte[]'s and inserting them into word
public byte[] ImageToByteArray(System.Drawing.Image imageIn)
{
byte[] result = null;
using (MemoryStream ms = new MemoryStream())
{
imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
result = ms.ToArray();
}
return result;
}
This is the result:
这篇关于如何写从字节[]使用C#Windows应用程序图像插入MS WORD的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!