1

私は同僚の何人かがまとめた数千ワードのファイルを持っています。彼らはあまり技術的な人ではなく、1,000 万画素のカメラを使用して、リサンプリングせずに直接 Word ファイルに数枚の写真を埋め込んだだけです。多くの場合、画像はページ上で非常に小さくなるように縮小されます。たとえば、約 3 インチ x 2 インチです。

これらの各〜300MBの単語ファイルを順番に処理し、画像をダウンサンプリングして単語ファイルを保存するには、ある種のツールを作成する必要があります。

.docx ではなく、主に .doc ファイルを扱っています。パワーポイントファイルもあるかもしれません。

私にはいくつかの選択肢があります。保存時に DPI と JPEG の品質を指定できる優れたインターフェイスをユーザーに提供するプログラムを C# で作成できます。あるいは、VBA マクロを使用してそれを行うこともできますが、画像のサイズ変更にはおそらく DLL を作成するか、サード パーティ製のものを使用する必要があります。

.xls および .xlsx ファイルから C# への Excel インポートを行ったことがありますが、それは簡単でした。

情報を得ることができますか: .doc ファイルにアクセスするための無料のライブラリ (商用利用は無料) はありますか? ダウンサンプリングの問題以外に、VBA で記述した場合、他に直面する障害はありますか? 最後に、これに取り組む方法について別の提案はありますか?

4

1 に答える 1

0

わかりました、約 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.ApplicationWord.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()メソッドは例外をスローします。

これを読んでいる人に役立つことを願っています。

于 2011-04-04T23:24:31.310 に答える