Хорошо, у меня не было никаких ответов или комментариев в течение недели, поэтому я собираюсь ответить на свой собственный вопрос с тем, что мне удалось выучить за это время. Я надеюсь, что это будет полезно для другого человека позже.
Как я уже упоминал, мы имеем дело с тысячами офисных файлов (word и powerpoint), которые содержат изображения с цифровых камер в полном разрешении. Размер файлов может быть до нескольких сотен МБ, где они должны составлять от нескольких сотен до нескольких МБ. Это создает нагрузку на сеть компании, и люди очень медленно открывают эти важные документы.
Первоначально я распаковал файлы .doc с помощью 7-Zip. Я использовал интерфейс командной строки в скрытом System.Diagnostics.Process
для извлечения «WordDocument» из файла .doc.
Затем я читал бы побайтно, пока не нашел бы маркер SOI JPEG: 0xFF 0xD8, и читал до маркера EOI: 0xFF 0xD9. Я прочитал бы эту часть WordDocument как поток в Image
и изменил бы его размер там. Затем я бы сохранил изображение обратно в поток WordDocument с меньшим разрешением / меньшим качеством. Я могу подтвердить, что изображения были прочитаны правильно, и что они были вставлены в WordDocument правильно. В итоге мы получили файлы намного меньше, чем начали. К сожалению, 7-Zip позволяет вам извлекать эти компоненты из файлов .doc, но, по-видимому, он не позволяет вам повторно вставить его. Так что вся эта работа была в основном даром. Я могу ошибаться, но моя версия (самая последняя на данный момент) не позволит мне добавлять файлы в пакет .doc.
Затем я переписал функцию, чтобы она использовала библиотеку взаимодействия MS Office. Я открываю Word.Application
и Word.Document
, запускаю Document.Convert()
и затем сохраняю его как файл .docx. В большинстве случаев этого достаточно, однако иногда мы получаем файл лишь немного меньшего размера. После проверки содержимого GZip файлов .docx создается впечатление, что создатель документа использовал Microsoft Photo Editor 3, который каким-то образом добавил в документ приблизительно несколько десятков МБ информации OLE.
Так вот, где я нахожусь. Я изложил два метода выше, которые я попробовал.
Первый - это простой метод редактирования .doc, который будет работать только в том случае, если вы сможете найти способ перепаковать WordDocument в .doc - и я не тестировал его с файлами PowerPoint, но я предполагаю, что процесс будет похожим. Преимущество второго метода заключается в предоставлении файлов .docx и .pptx, которые можно открыть с помощью zip-совместимой библиотеки пакетов, а ресурсы можно легко редактировать / удалять. К сожалению, это означает, что Office должен быть установлен на компьютере, и если у вас нет относительно новой версии Office, метод Document.Convert()
выдаст исключение.
Надеюсь, это поможет любому, читающему это.