【发布时间】:2018-12-17 16:58:17
【问题描述】:
标题听起来很疯狂,但请耐心等待。这是任何对象都可能存在的问题。
我正在内存中生成一个位图对象,我想将它直接传递给另一个想要打开位图文件的函数。简单的解决方案是将文件写入磁盘,针对文件调用函数,然后删除文件。我不想那样做。如果我将大量图像对象推送到带有 VSTO 加载项的 Word 文档中,那么当整个事情可以在内存中完成时,无缘无故地颠簸我的磁盘是没有意义的。
我想我正在寻找一种不同的函数来将图片插入到接受位图对象的 Word 文档中。或者一种传递实际指向内存的文件系统对象的方法(不是 RAMDisk,而是 RAMFile?)。或者一种将“Image.Save”直接连接到“AddPicture”功能的阅读器而不实际在磁盘上创建文件的方法。
希望有更好的方法来做到这一点。
下面是代码示例:
Dim newImage = GenerateImage(InputString, SelectedFormat)
Dim imagePath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName())
newImage.Save(imagePath, ImageFormat.Png)
With Globals.ThisAddIn.Application
.Selection.InlineShapes.AddPicture(imagePath)
End With
File.Delete(imagePath)
【问题讨论】:
-
您的选择基本上是:1) 剪贴板和 2) 用有效的 OPC 平面文件格式 Word Open XML 包装位图,这意味着首先将位图转换为 base64。首先,使用 Word 中的 Paste 或 PasteSpecial 方法将其插入。第二,Word 的 Range.InsertXML 方法。
-
一旦图像达到一定的分辨率/文件大小,Word 就不能很好地处理图像,因此您的图像必须是合理的大小。既然如此,磁盘 I/O 就不应该那么重要。即使它们大约是 3MB(这里是 Word 开始遇到 iirc 问题的地方),硬盘也可以轻松处理这种活动,而不会真正威胁到寿命。不过,如果您使用 Cindy 的建议,you'll need this。 @CindyMeister 把它放在答案中!
标签: vb.net bitmap ms-word vsto