我一直致力于从多个word文件中读取图像的应用程序,并使用C#中的Microsoft.Office.Interop.Word
将它们存储在一个单词文件中
编辑:我还需要在文件系统上保存图像的副本,因此我需要位图或类似对象中的图像。
到目前为止This是我的实现,工作正常:
foreach (InlineShape shape in doc.InlineShapes)
{
shape.Range.Select();
if (shape.Type == WdInlineShapeType.wdInlineShapePicture)
{
doc.ActiveWindow.Selection.Range.CopyAsPicture();
ImageData = Clipboard.GetDataObject();
object _ob1 = ImageData.GetData(DataFormats.Bitmap);
bmp = (Bitmap)_ob1;
images[i++] = bmp;
/*
bmp.Save("C:\\Users\\Akshay\\Pictures\\bitmaps\\test" + i.ToString() + ".bmp");
*/
}
}
我有:
InlineShapes
DataObject
DataObject
格式从Bitmap
提取形状并存储在Bitmap
对象中。
我被告知不要在Word自动化中使用剪贴板,而是使用Word API。
我已经阅读了它并找到了SO answer说明相同的内容。
我在MSDN
,SO
等上查找了许多从Word文件中读取图像的实现,但在没有使用剪贴板的情况下找不到任何实现。
如何在不使用剪贴板的情况下使用Microsoft.Office.Interop.Word
命名空间中的Word API从Word文件中读取图像?
答案 0 :(得分:0)
Office Open XML文件格式的Word文档在Base64中存储图像。因此,应该可以提取该信息并将其转换/流式传输到文件中。使用Range.WordOpenXML属性在Word应用程序中打开文档时,可以访问该信息。
string shapeBase64 = shape.Range.WordOpenXML;
这将以平面文件OPC格式返回整个Word Open XML。换句话说,它不仅包含Base64中的图片,而是整个zip包定义为围绕它的XML。在我的快速测试中,包含实际Base64的标签是
<pkg:binaryData>
这是
的子元素<pkg:part pkg:name="/word/media/image1.jpg" pkg:contentType="image/jpeg" pkg:compression="store">
请注意,您也可以一步到位地获取整个文档的WordOpenXML:
document.Content.WordOpenXML
但是可能需要了解文档正文中的InlineShapes链接到&#34; media&#34;中的实际信息的方式。一部分。
当然,可以直接使用Zip包(也许使用Open XML SDK),而不是在Word.Application中打开文档。