如何使用C#.Net通过Microsoft.Interop.word比较word文档每页中的图像(形状)



我正在使用以下代码将Word文档的图像(Microsoft.Interop.Office.Word中的Shape(替换为新图像,但客户的要求是,我需要检查Word文档第一页的第一个图像,然后将此图像与文档其余部分的图像进行比较,如果匹配,则将其替换为新的图像,否则就不需要帮助了比较两种形状(图像(

public void ReplaceWordImage(string FilePath)
{
Word.Document d = new Word.Document();
Word.Application WordApp;
WordApp = new Microsoft.Office.Interop.Word.Application();
bool headerImage = false;
try
{
object missing = System.Reflection.Missing.Value;
object yes = true;
object no = false;
object filename = @"D:/ImageToReplace/5.docx";

d = WordApp.Documents.Open(ref filename, ref missing, ref no, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref yes, ref missing, ref missing, ref missing, ref missing);
List<Word.ShapeRange> ranges = new List<Microsoft.Office.Interop.Word.ShapeRange>();
List<Word.ShapeRange> headerRanges = new List<Microsoft.Office.Interop.Word.ShapeRange>();
foreach (Word.Shape shape in d.Shapes)
{
if (shape.Type == Microsoft.Office.Core.MsoShapeType.msoPicture)
{
shape.Delete();
foreach (Word.Range r in ranges)
`enter code here`    {
r.InlineShapes.AddPicture(@"D:Untitled.jpg", ref missing, ref missing);
break;
}
}

Word对象模型不提供任何内容来比较两个图像。最好的方法是将两者都保存在磁盘上,然后尝试比较两者的字节表示。然而,还有更好的方法来完成这项工作。答案是Open XML SDK,它允许在不将图像保存到磁盘的情况下动态获取图像的字节表示。CCD_ 1包含可操作包含WordDocument内容的存储器流的类CCD_。并且可以使用CCD_ 5将CCD_ 4转换为CCD_。有关详细信息,请参阅将互操作对象的Word转换为byte[]而不进行物理保存。

最新更新