わかりました、約 1 週間回答もコメントもありませんでしたので、その間に学んだことで自分の質問に答えます。将来、他の誰かにとって有益になることを願っています。
前述したように、私たちはフル解像度のデジタル カメラ画像を含む何千ものオフィス (ワードおよびパワーポイント) ファイルを扱っています。ファイルは数百 MB までの任意の場所に配置できますが、数百 KB から最大でも数 MB である必要があります。これは会社のネットワークに負担をかけ、人々がこれらの重要なドキュメントを開くのも非常に遅くなります。
私が最初にしたことは、.doc ファイルを 7-Zip で解凍することでした。非表示でコマンドライン インターフェイスを使用してSystem.Diagnostics.Process
、.doc ファイルから "WordDocument" を抽出しました。
次に、JPEG SOI マーカー (0xFF 0xD8) が見つかるまで WordDocument をバイト単位で読み取り、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 を使用していたようです。Microsoft Photo Editor 3 は、何らかの方法で約数十 MB 相当の OLE 情報を docx に追加しました。
それが私がやっていることです。上記で試した2つの方法の概要を説明しました。1 つ目は、WordDocument を .doc に再パッケージ化する方法を見つけることができる場合にのみ機能する生の .doc 編集手法です。PowerPoint ファイルでテストしていませんが、プロセスは似ていると思います。2 番目の方法には、zip 互換のパッケージ ライブラリで開くことができる .docx および .pptx ファイルが提供され、リソースを簡単に編集/削除できるという利点があります。残念ながら、Office をマシンにインストールする必要があり、比較的新しいバージョンの Office を使用していない場合、このDocument.Convert()
メソッドは例外をスローします。
これを読んでいる人に役立つことを願っています。