【问题标题】:MSWord batch resampling imagesMSWord 批量重采样图像
【发布时间】:2011-07-27 08:46:57
【问题描述】:

我有几千个单词文件,是我的一些同事整理的。他们不是很懂技术的人,他们只是拿了 10 兆像素的相机,并在没有重新采样的情况下直接将一些照片嵌入到 word 文件中。通常,图像会在页面上缩小到非常小,例如大约 3" x 2"。

我需要编写某种工具来依次遍历这些,每个约 300MB,word 文件并对图像进行下采样,然后保存 word 文件。

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

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

我已经完成了一些从 .xls 和 .xlsx 文件到 C# 的 Excel 导入,这很容易,但是我怀疑以格式看起来没有变化的方式将下采样图像写回 .doc 文件可能会很棘手。

我能否获得一些意见:是否有一些免费的库(免费用于商业用途)用于访问 .doc 文件,它们可以做我需要它们做的事情?如果我用 VBA 编写它,除了下采样问题 - 我还会面临其他障碍吗?最后,您对如何解决这个问题有其他建议吗?

【问题讨论】:

    标签: c# ms-word resampling


    【解决方案1】:

    好的,我在大约一周内没有任何答案或 cmets,所以我将用我在那段时间学到的知识来回答我自己的问题。我希望这对以后的其他人有所帮助。

    正如我所提到的,我们正在处理数以千计的办公室(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.ApplicationWord.Document,运行Document.Convert(),然后将其保存为.docx 文件。很多时候这已经足够了,但有时我们最终会得到一个稍微小一点的文件。检查 .docx 文件的 GZip 内容后,文档的创建者似乎使用了 Microsoft Photo Editor 3,它以某种方式在 docx 中添加了大约几十 MB 的 OLE 信息。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-01
      • 2011-04-19
      • 1970-01-01
      • 2019-05-01
      • 1970-01-01
      • 2014-02-28
      • 1970-01-01
      相关资源
      最近更新 更多