以编程方式在Word文档中查找图片

时间:2014-09-11 16:31:25

标签: .net ms-word

问题: -

在最近的重塑工作中,所有单词文档(保存为RTF文件))

我的单词文档大小为2,3或甚至4MB。

观察文件中的图片,我注意到有些图片缩小到48%,70%,88%等等。如果我将图像从文档中剪切出来,将其粘贴到Paint.NET中,调整大小,将其粘贴回文档并按原文定位,我可以将文档的大小降低到不到1/10的人工捏造的。

我想以编程方式处理1150个Word文档,并在那里查找缩放的图片。然后,我想拉出图片,调整大小,然后将它们放回去替换手动添加的图片。节省磁盘空间。

我无法导航Word对象模型并以编程方式查找图片。

MSDN上的这个网页说你可以添加它们,就像这样

this.Application.Selection.InlineShapes.AddPicture(@"C:\SamplePicture.jpg");

所以我认为使用InlineShapes集合可以让我访问文档中的图片集。

我有互操作声明。

using Microsoft.Office.Interop.Word;
using Microsoft.Office.Interop;
using Microsoft.Office;

然后我打开Word应用程序,这样的文档(这个工作)

private void OpenWordApplication()
{
    _WordApp = new Microsoft.Office.Interop.Word.Application();
    if (chkVisibleWord.CheckState == CheckState.Checked) {
        _WordApp.Visible = true;
    }
    else
    {
        _WordApp.Visible = false;
    }

}

private void OpenTheDocument(string DocumentPath)
{
    _WordDoc = _WordApp.Documents.Open(DocumentPath);
    changesMade = false;
}

当我试图在InlineShapes中找到eh图片时,我似乎无法抓住它们。

_WordApp.Selection.HomeKey(WdUnits.wdStory);

int picCount = _WordApp.ActiveDocument.InlineShapes.Count;
MessageBox.Show(string.Format("There are {0} images in this document", picCount));

我收到一个消息框,说明计数为零。

注意:应用程序在Word中打开文档就好了。根据我在表单上检查的复选框,它对文档执行其他操作,对我来说问题似乎是在访问InlineShapes集合时。

任何指针。到目前为止,我很感谢你的关注?

提前致谢

3 个答案:

答案 0 :(得分:0)

我们最终做的解决方案是让一位能够使用Microsoft Word,一张纸,一支铅笔和Paint.Net应用程序的测试人员。

测试人员使用铅笔和纸张标记图像的尺寸和位置,使用Paint.Net调整图像大小。

我知道它没有按照我的预期编程处理文档/图像,但我们有一个截止日期来完成流程,有时作为开发人员,当你认为手动操作时你必须打电话是正确的做法。

答案 1 :(得分:0)

尝试:

foreach (Microsoft.Office.Interop.Word.Shape s in wordApp.ActiveDocument.Shapes)
{
        ...
}

答案 2 :(得分:0)

此代码将找到文档中的所有嵌入式图片。这些确实是内联形状。因此,不确定操作码的问题是什么。

Number in in-line shapes = 4
Shape (width,height) = (293.25,164.75)
Shape type = wdInlineShapePicture

Shape (width,height) = (412.5,231.75)
Shape type = wdInlineShapePicture

Shape (width,height) = (226.9,127.5)
Shape type = wdInlineShapePicture

Shape (width,height) = (222.75,125.1)
Shape type = wdInlineShapePicture

这将产生输出...

setResponse