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 的机器上运行,它的效果会很好。 有人遇到过这种情况吗?