C# MSWord批量重采样图像

C# MSWord批量重采样图像,c#,ms-word,resampling,C#,Ms Word,Resampling,我有几千字的文件,我的一些同事已经把它们放在一起了。他们不是很专业的人,他们只是拍摄了1000万像素的相机,并将一些照片直接嵌入word文件中,而无需重新采样。通常,页面上的图像会缩小到非常小,比如说3英寸乘以2英寸左右 我需要写一些工具,依次遍历这些,每个~300MB的word文件,并对图像进行下采样,然后保存word文件 我们主要处理.doc文件,而不是.docx文件。可能还有一些powerpoint文件 我有几个选择。我可以用C语言编写一个程序,它为用户提供了一个很好的界面,允许用户在保存

我有几千字的文件,我的一些同事已经把它们放在一起了。他们不是很专业的人,他们只是拍摄了1000万像素的相机,并将一些照片直接嵌入word文件中,而无需重新采样。通常,页面上的图像会缩小到非常小,比如说3英寸乘以2英寸左右

我需要写一些工具,依次遍历这些,每个~300MB的word文件,并对图像进行下采样,然后保存word文件

我们主要处理.doc文件,而不是.docx文件。可能还有一些powerpoint文件

我有几个选择。我可以用C语言编写一个程序,它为用户提供了一个很好的界面,允许用户在保存时指定DPI和JPEG质量。或者,我可以使用VBA宏来完成,但是我可能需要编写DLL或使用第三方DLL来调整图像大小

我已经做了一些Excel从.xls和.xlsx文件导入到C#的工作,这是一件轻而易举的事,但是我怀疑,将下采样图像写回.doc文件的方式可能会让格式看起来保持不变,这可能会很棘手


我能得到一些信息吗:是否有一些免费的库(免费用于商业用途)来访问.doc文件,它们可以完成我需要它们做的事情?如果我用VBA编写它,除了下采样问题之外,还有其他障碍吗?最后,关于如何解决这个问题,你有其他建议吗?

好的,我已经有一周没有任何答案或评论了,所以我将用我在这段时间里学到的知识来回答我自己的问题。我希望这对以后的其他人会有好处

正如我提到的,我们正在处理数以千计的office(word和powerpoint)文件,其中包含全分辨率数码相机图像。这些文件可以是高达几百MB的任何地方,其中它们最多应该是几百KB到几MB。这给公司网络带来了负担,而且人们打开这些重要文档的速度也非常慢

我最初做的是用7-Zip解包.doc文件。我使用隐藏的
System.Diagnostics.Process
中的命令行界面从.doc文件中提取“WordDocument”

然后,我将逐字节读取WordDocument,直到找到JPEG SOI标记0xFF 0xD8,并一直读取到EOI标记0xFF 0xD9。我会将WordDocument的那部分作为一个流读入一个
图像
,然后在那里调整它的大小。然后我会以较小的分辨率/质量将图像保存回WordDocument流。我可以确认图像被正确读取,并且它们被正确插入WordDocument。我们最终得到的文件比开始时小得多。不幸的是,7-Zip允许您从.doc文件中提取这些组件,但它似乎不允许您重新插入。所以所有这些工作基本上都是白费力气。我可能错了,但我的版本(目前最新版本)不允许我将文件添加到.doc包中

接下来,我重新编写了该函数,以便它使用MS Office互操作库。我打开一个
Word.Application
和一个
Word.Document
,运行
Document.Convert()
,然后将其保存为.docx文件。很多时候这已经足够了,但是有时候我们最终得到的文件只是稍微小一点。在检查.docx文件的GZip内容后,似乎文档的创建者使用了Microsoft Photo Editor 3,它以某种方式为docx添加了几十MB的OLE信息

这就是我要做的。我概述了两种我曾尝试过的方法。 第一种是原始的.doc编辑技术,只有找到将WordDocument重新打包到.doc中的方法,这种技术才会起作用——我还没有用PowerPoint文件对其进行过测试,但我认为这个过程也会类似。第二种方法的优点是提供.docx和.pptx文件,这些文件可以使用与zip兼容的打包库打开,并且可以非常轻松地编辑/删除资源。不幸的是,这意味着需要在计算机上安装Office,如果您没有相对较新的Office版本,则
Document.Convert()
方法将引发异常

我希望这对阅读本文的人有所帮助