C#根据office版本在word模板上插入不同图像大小的图像
C# insert image on word template different image size depending on office version
我在 .Net framework 4.0 中有一个 C# windows 表单,我正在向 word 模板(书签)添加图像。
我面临的情况是,根据 运行 应用程序所在计算机上安装的 Office 版本,图像以不同的大小呈现。在 Word 2010 上,它的效果很好,但在 Word 365 等最新版本上,图像较小。
我正在使用以下代码:
Word.Document doc = null;
string filePath = "C:\myImage.png";
string base64bytes = "My image base64 string";
var bytes = Convert.FromBase64String(base64bytes);
using (MemoryStream ms = new MemoryStream(bytes))
{
using (System.Drawing.Image imgToResize = System.Drawing.Image.FromStream(ms))
{
using (Image finalImg = new Bitmap(imgToResize, new Size(150, 150)))
{
finalImg.Save(filePath, System.Drawing.Imaging.ImageFormat.Png);
}
}
}
document.Bookmarks["MyBookmarkName"].Range.InlineShapes.AddPicture(filePath, true, false);
还有什么我可以做的吗?或者我可以确保图像保持相同大小的任何命令或东西?
经过一段时间的挖掘,发现它实际上是 Office 版本之间的不同行为。
必须检查office版本并基于它,在渲染之前设置图像大小。
但偶尔会发生这种情况,但并非总是如此,并不总是在同一个文档中发生,而是发生在:
System.Runtime.InteropServices.COMException (0x800A1066): Command failed
at Microsoft.Office.Interop.Word.Range.PasteSpecial(Object& IconIndex, Object& Link, Object& Placement, Object& DisplayAsIcon, Object& DataType,
Object& IconFileName, Object& IconLabel)
代码:
string htmlTable = GetDataHtml(data, useGrouping);
HtmlFragment.CopyToClipboard(htmlTable);
object missing = Type.Missing;
object pasteHtml = Word.WdPasteDataType.wdPasteHTML;
view.Bookmarks[bookmarkName].Range.PasteSpecial(ref missing, ref missing, ref missing, ref missing, Word.WdPasteDataType.wdPasteHTML, ref missing, ref missing);
这里没有什么奇怪的地方,如果它在装有 Office 2010 的机器上运行,它的效果会很好。
有人遇到过这种情况吗?
我在 .Net framework 4.0 中有一个 C# windows 表单,我正在向 word 模板(书签)添加图像。 我面临的情况是,根据 运行 应用程序所在计算机上安装的 Office 版本,图像以不同的大小呈现。在 Word 2010 上,它的效果很好,但在 Word 365 等最新版本上,图像较小。
我正在使用以下代码:
Word.Document doc = null;
string filePath = "C:\myImage.png";
string base64bytes = "My image base64 string";
var bytes = Convert.FromBase64String(base64bytes);
using (MemoryStream ms = new MemoryStream(bytes))
{
using (System.Drawing.Image imgToResize = System.Drawing.Image.FromStream(ms))
{
using (Image finalImg = new Bitmap(imgToResize, new Size(150, 150)))
{
finalImg.Save(filePath, System.Drawing.Imaging.ImageFormat.Png);
}
}
}
document.Bookmarks["MyBookmarkName"].Range.InlineShapes.AddPicture(filePath, true, false);
还有什么我可以做的吗?或者我可以确保图像保持相同大小的任何命令或东西?
经过一段时间的挖掘,发现它实际上是 Office 版本之间的不同行为。
必须检查office版本并基于它,在渲染之前设置图像大小。
但偶尔会发生这种情况,但并非总是如此,并不总是在同一个文档中发生,而是发生在:
System.Runtime.InteropServices.COMException (0x800A1066): Command failed
at Microsoft.Office.Interop.Word.Range.PasteSpecial(Object& IconIndex, Object& Link, Object& Placement, Object& DisplayAsIcon, Object& DataType,
Object& IconFileName, Object& IconLabel)
代码:
string htmlTable = GetDataHtml(data, useGrouping);
HtmlFragment.CopyToClipboard(htmlTable);
object missing = Type.Missing;
object pasteHtml = Word.WdPasteDataType.wdPasteHTML;
view.Bookmarks[bookmarkName].Range.PasteSpecial(ref missing, ref missing, ref missing, ref missing, Word.WdPasteDataType.wdPasteHTML, ref missing, ref missing);
这里没有什么奇怪的地方,如果它在装有 Office 2010 的机器上运行,它的效果会很好。 有人遇到过这种情况吗?