MSWord批量重新采样图像

我有几千个单词文件,我的一些同事已经放在一起。他们不是非常技术性的人,他们刚刚拍摄了他们的1000万像素摄像头并将几张照片直接嵌入到word文件中而无需重新采样。通常情况下,图像在页面上缩小到非常小,比如大约3英寸乘2英寸。 我需要编写一些工具来顺序浏览这些工具,每个~300MB,word文件并对图像进行下采样,然后保存word文件。 我们主要处理的是.doc文件,而不是.docx。可能还有一些powerpoint文件。 我有几个选择。我可以用C#编写一个程序,它为用户提供了一个很好的界面,允许他们在保存时指定DPI和JPEG质量。或者,我可以使用VBA宏来执行此操作,但是我可能需要编写DLL或使用第三方来调整图像大小。 我已经完成了从.xls和.xlsx文件到C#的一些Excel导入,这是一件轻而易举的事情,但我怀疑将下采样图像写回.doc文件的方式使得格式看起来不变可能会很棘手。 我可以获得一些输入:是否有一些免费的库(免费用于商业用途)来访问.doc文件哪些可以做我需要他们做的事情?如果我要用VBA写它,除了下采样问题 - 我还会遇到其他障碍吗?最后,您是否有其他建议如何解决这个问题?     
已邀请:
好的,我在大约一周内没有得到任何答案或评论,所以我将用我在那段时间学到的东西来回答我自己的问题。我希望这对后来的其他人有益。 正如我所提到的,我们正在处理数千个办公室(word和powerpoint)文件,其中包含全分辨率数码相机图像。这些文件最多可达几百MB,最多应为几百KB到几MB。它给公司网络带来了负担,人们打开这些重要文件的速度也很慢。 我最初做的是用7-Zip解压缩.doc文件。我在隐藏的
System.Diagnostics.Process
中使用命令行界面从.doc文件中提取“WordDocument”。 然后,我将逐字节地读取WordDocument直到找到JPEG SOI标记:0xFF 0xD8,并读取直到EOI标记:0xFF 0xD9。我会把WordDocument的那一部分作为一个流读入
Image
,并在那里调整大小。然后,我会以较小的分辨率/较小的质量将图像保存回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需要安装在计算机上,如果您没有相对较新版本的办公室,那么
Document.Convert()
方法将抛出异常。 我希望这有助于任何人阅读此内容。     

要回复问题请先登录注册