2009-09-10 1 views
13

RTFテンプレートからRTFドキュメントを生成するコードがあります。基本的に文字列検索を行い、RTFファイル内の特殊タグを置き換えます。これはウェブページからアクセスできます。イメージが埋め込まれたRTFのサイズを小さくするにはどうすればよいですか?

通常、この処理時間は本当に速いです。

ただし、テンプレート内に画像を埋め込む必要があります。 Wordの "Insert/Picture/From File ..."機能を使ってこれらをJPEG画像として埋め込んでいます。しかし、結果として得られるRTFファイルのサイズは、イメージに大きく依存していることがわかりました。

たとえば、20kのJPEGロゴを挿入しました(これは基本的にはテキストを含む堅実な背景です)。 RTFファイルのサイズは約390k(画像なし)から510k(画像あり)に増加しました。

次に、スクリーンショットを含むJPEGを挿入しました。つまり、画像にテキストや複数の色などが含まれています.JPEGは約150kです。このイメージを使用すると、RTFファイルのサイズは390kから3.5MBに増加しました。

したがって、画像をRTFに保存するためにWordが使用するエンコードは、線形的に実行されません。私はそれがJPEG画像にあるものに依存していると推測しています。

ファイル処理時間を最小限に抑えるために、RTFテンプレートのサイズを最小限に抑える必要があります。

  • 画像を埋め込んだRTFファイルのサイズを最小限に抑える方法はありますか?
  • Wordが使用するエンコードを制御する方法はありますか?私はどこでもオプションを見ることができません。
  • Word/RTFで使用されるバイナリエンコーディングの種類を知っている人はいますか?

ありがとうございます。

+2

答えはありませんが、JPEGのような圧縮された表現ではなく、圧縮されていないビットマップとして埋め込まれているため、ほぼ確実です。 –

答えて

5

RTFファイルのイメージは、圧縮されていないWMFとして保存されます。 Macでは、それはmacpictになります。ファイルのサイズを小さくすることをお勧めします。ドキュメントにコピーを挿入するのではなく、イメージをドキュメントにリンクすることです。トレードオフは、ファイルをまとめて保存する必要があることです。

EDIT RTFをオプションで圧縮していますか? zip/rarを使用すると、ファイルサイズは元に戻りますが、最初は明らかに解凍する必要があります。 rtf圧縮を行うツールがあるはずですが、私はそれらを使ったことはありません。

+0

ありがとうございます。 Zipingは助けにならないでしょう - 私はまだファイルを処理するために解凍する必要があります。これは私の問題であるファイルストレージサイズではなく、RTFを処理するのに要する時間です。 私はリンクについて理解していません - おそらくWordスキルが欠けています... Wordにハイパーリンクを付けてそのURLの内容を文書に表示することは可能でしょうか?私は簡単に私のイメージをURLで利用できるようにすることができます。イメージが読者にドキュメントに現れ、読者がイメージを取得するために何もする必要がない限り、私は満足しているだろう(すなわち、私はユーザにリンクをクリックさせたくない)。 –

+0

ハイパーリンクを追加することは、単語自体またはVBAのいずれかから簡単ですが、申し訳ありませんが、イメージをrtfドキュメント内に表示する方法はわかりませんが、内部にWMFのコピーはありません。スクリーンショットは、たとえば白以外の背景がある場合に必要なものよりもはるかに大きくなる傾向があります。あなたの画像を編集し、bmpとして保存することを検討するかもしれません。 bmp形式は、wmfの大きさを知ることができます。どのくらいの色情報を16ビットイメージとして保存しなくてもかまいませんか? – DaveParillo

+0

申し訳ありません - 私は16色のイメージを意味しました。もともとは24ビットの3.5Mイメージだった私のモニターのダンプを保存しました。 16colorとして保存され、641Kです。画像には何らかのダメージがありますが、それでもなお「保守可能」です – DaveParillo

15

はここで最適なソリューションです

http://support.microsoft.com/kb/224663

抜粋:

現象

あなたはEMFを含むMicrosoft Word文書を保存すると、 PNG、GIF、またはJPEGグラフィックを別のファイル形式(たとえば、 Word 6.0/95 .doc)またはリッチテキスト形式(.rtf))、 文書のファイルサイズが大幅に増加することがあります。

たとえば、Word 2000文書として保存されたJPEG グラフィックを含むMicrosoft Word 2000文書のファイルサイズは、 45,568バイト(44.5KB)です。ただし、このファイルをWord 6.0/95 (.doc)またはリッチテキスト形式(.rtf)として保存すると、ファイルサイズが 1,289,728バイト(1.22MB)に拡大することがあります。

原因

この機能は、Microsoft Wordの設計によるものです。文書が保存されるときに EMF、PNG、GIF、またはJPEGグラフィックがWord文書に挿入された場合 文書に2つのコピーが保存されます。グラフィックスは、該当するEMF、PNG、GIF、またはJPEG 形式で保存され、WMF(Windowsメタファイル)形式にも変換されます。あなたは間違っ レジストリエディタを使用する場合は、 は、オペレーティングシステムの再インストールする必要があり、深刻な問題を引き起こす可能性が警告

解決

。 Microsoft は、レジストリ エディタを間違って使用した結果生じる問題を解決できることを保証できません。レジストリエディタは、自己責任で使用してください。 、文書内のグラフィックの2つのコピーを保存からWordを防ぐ や文書のファイルサイズを小さくするために、Microsoft Windowsのレジストリ に ExportPictureWithMetafile = 0の文字列値を追加するには

+0

リンクされたページは、元のファイルと元のファイルのみを保存するようにレジストリを変更した場合のイメージのコピーを2つ保存する方法です。面白い – codeulike

+0

私はこれが答えとしてマークされたものよりも良い答えだと思います。 – bfhd

+0

ワードパッドに相当する方法を知っている人はいませんか? 'ExportPictureWithMetafile = 0'文字列の値を' HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Applets \ Wordpad \ Options'に追加しようとしましたが、明らかな効果はありませんでした。 – ulatekh

-1

はい、余分な文字を削除します。これを行うには、それらをストリームに挿入する必要があります。 たとえば、1行に20文字以上のf文字がある場合、ストリーム内のf [20]に置き換えることができます。それはスタートです。

- 運がよい。

1

私たちは仕事中に同様のプロジェクトを行っています。私たちだけがその "挿入/画像/ファイルから..."機能を使用していない。私たちのテンプレートには[photos]という名前のタグがあります。あなた自身もそうであると考えています。文書を処理するとき、タグを画像を表示するのに必要なRTFコードに置き換えます。私たちはそれらをテーブルの中に入れて、各行に2つのイメージを表示し、さらにタイトルの上に1つの行を表示しています。

テンプレートに[photos]というタグを付けることができます。次に、タグをRTFコードに置き換えます。あなたはこれらのコードへの良い参照をウェブ上で見つけることができます。たとえば。 here

さて、私のコードは次のようなものになります。

\はパー{\ RTF1 \ ANSI \ deff0 {\ trowd \ cellx8810 {タイトル} \ INTBL \ QC \セル\行を} { \ trowd \ cellx4405 \ cellx8810 {\ PICT \ jpegblip \ picwgoal4000 \ pichgoal3000 \ piccropl-50 \ piccropr-50 \ piccropt-50 \ piccropb-50 \ヘクス 進数のバイトの配列としてあなたの画像} \ INTBL \ cell {\ pict \ jpegblip \ picwgoal4000 \ pichgoal3000 \ piccropl-50 \ piccropr-50 \ piccropt-50 \ piccropb-50 \ hex あなたの他の画像} \ INTBL \セル\行}

あなたはバイト配列にあなたのイメージを取得する場合、あなたは進コードを取得するにはBitConverter.ToString(配列)を使用することができます。あなたはダッシュを " - "で置き換える必要があります。

私たちのファイルは、「通常の」RTFが占めるスペースの1/10以下を占めます。メモ帳++などのエディタで文書のコードを開くと、RTFコードが表示されますが、文書を開いてRTF(名前を変更)として保存すると1.5Mbから50Mbになります!! 私はDaveParilloの返事がそれを正当化すると推測しています。私は各画像を一度しか書いていません。

希望します。 乾杯のメイト

0

スワートビーズの回答は私にとって完璧に機能しました。まずG.I.M.Pを使用して画質を「0」に下げた。 jpeg機能として保存します。上記のSwartbeesが提案したMicrosoftのソリューションに従った後、私はファイルに画像を再挿入し、サイズの増加は229kから279k(29000kbではなく)で無視できるものでした。

ご意見ありがとうございます。

1

最初は、各バイトが2文字(2バイト)で格納されていることに注意してください。これは、増分が少なくとも元の画像の倍のサイズであることを意味します。

他に必要なことは、WordとWord Padが、同じ画像と他のフィールド(RTFなしで表示可能)の異なる(フレーバーまたはフォーマット)を挿入することです。ここで

は( https://joseluisbz.wordpress.com/2011/07/16/subiendo-imagenes-png-y-jpg-y-archivos-a-mysql-con-php-y-jsp-y-mostrarlos-en-rtf-usando-clases/

は今、多分あなたは別の(http://joseluisbz.wordpress.com/2013/07/26/exploring-a-wmf-file-0x000900/)と、元の画像に置き換える必要があります。いくつかのRTF(https://joseluisbz.wordpress.com/2011/06/22/script-de-clases-rtf-para-jsp-y-php/)に画像を挿入するために使われるスクリプト、および使用の一例です。

関連する問題