15

RTFテンプレートからRTFドキュメントを生成するコードがいくつかあります。基本的に文字列検索を実行し、RTFファイル内の特別なタグを置き換えます。これには、Webページからアクセスできます。

通常、このための処理時間は非常に高速です。

ただし、テンプレート内に画像を埋め込む必要があります。Wordの「挿入/画像/ファイルから...」機能を使用して、これらをJPEG画像として埋め込みます。しかし、結果として得られるRTFファイルのサイズは画像に大きく依存していることがわかりました。

たとえば、20kのJPEGロゴ(基本的にはテキスト付きの無地の背景)を挿入しました。RTFファイルのサイズが約390k(画像なし)から510k(画像あり)に増加しました。

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

そのため、Wordが画像をRTFに保存するために使用するエンコードは、直線的に実行されません。JPEG画像の内容に依存していると思います。

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

  • 画像が埋め込まれたRTFファイルのサイズを最小化する方法について誰かがアイデアを持っていますか?
  • Wordが使用するエンコーディングを制御する方法はありますか?どこにもオプションが表示されません。
  • Word / RTFが使用するバイナリエンコーディングの種類を知っている人はいますか?

前もって感謝します。

4

6 に答える 6

17

これが最善の解決策です

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

抜粋:

症状

EMF、PNG、GIF、またはJPEGグラフィックを含むMicrosoft Wordドキュメントを別のファイル形式(たとえば、Word 6.0 / 95(.doc)またはリッチテキスト形式( .rtf))として保存すると、ファイルサイズはドキュメントが劇的に増加する可能性があります。

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

原因

この機能は、MicrosoftWordの仕様によるものです。EMF、PNG、GIF、またはJPEGグラフィックがWord文書に挿入されている場合、文書を保存すると、グラフィックの2つのコピーが文書に保存されます。グラフィックは、該当するEMF、PNG、GIF、またはJPEG形式で保存され、WMF(Windowsメタファイル)形式にも変換されます。

解像度

警告レジストリエディタを誤って使用すると、深刻な問題が発生し、オペレーティングシステムの再インストールが必要になる場合があります。Microsoftは、レジストリエディタを誤って使用した結果として生じる問題を解決できることを保証できません。レジストリエディタは自己責任で使用してください。

Wordがグラフィックの2つのコピーをドキュメントに保存しないようにし、ドキュメントのファイルサイズを小さくするには、ExportPictureWithMetafile=0の文字列値をMicrosoftWindowsレジストリに追加します。

于 2010-01-18T18:12:56.257 に答える
5

RTFファイル内の画像は、圧縮されずにWMFとして保存されます。macでは、macpictになります。ファイルサイズを小さくするための最善の策は、ドキュメントにコピーを挿入するのではなく、画像をドキュメントにリンクすることです。トレードオフは、ファイルを一緒に保持する必要があることです。

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

于 2009-09-10T14:08:53.557 に答える
1

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

したがって、テンプレートにタグ[写真]を配置することができます。次に、タグをRTFコードに置き換えます。これらのコードへのいくつかの良いリファレンスをウェブ上で見つけることができます。たとえば。ここ

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

\ par {\ rtf1 \ ansi \ deff0 {\ trowd \ cellx8810 { title } \ intbl \ qc \ cell \ row} {\ trowd \ cellx4405 \ cellx8810 {\ pict \ jpegblip \ picwgoal4000 \ pichgoal3000 \ piccropl-50 \ piccropr-50 \ piccropt-50 \ piccropb-50\hex 画像を16進数のバイト配列として}\intbl \ cell {\ pict \ jpegblip \ picwgoal4000 \ pichgoal3000 \ piccropl-50 \ piccropr-50 \ piccropt-50 \ piccropb-50 \ hex 他の画像}\intbl \ cell \ row}

画像をバイト配列に変換する場合は、BitConverter.ToString(array)を使用して16進コードを取得できます。ダッシュ「-」を「」に置き換える必要があるのはあなただけです。

私たちのファイルは、「通常の」RTFが占めるスペースの1/10未満を占めます。Notepad ++などのエディターでドキュメントのコードを開くとRTFコードが表示されますが、ドキュメントを開いてRTF(名前を変更)として保存すると、1.5Mbから50Mbになります!! DaveParilloの返事はそれを正当化すると思います:私は各画像を一度だけ書いています。

それが役に立てば幸い。歓声メイト

于 2012-03-13T16:40:15.700 に答える
1

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

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

RTFに画像を挿入するために使用されるいくつかのスクリプト(https://joseluisbz.wordpress.com/2011/06/22/script-de-clases-rtf-para-jsp-y-php/)とその使用例を次に示します。 (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/)。

于 2013-08-16T03:19:34.363 に答える
0

Swartbeesの答えは私にとって完璧に機能しました。まず、GIMP Saveasjpeg機能を使用して画質を「0」に下げました。上記のSwartbeesによって提案されたマイクロソフトのソリューションに従った後、画像をファイルに再挿入したところ、サイズの増加は229kから279k(29000kbではなく)でした。

皆さんの提案に感謝します。

于 2013-01-16T05:12:08.370 に答える
-1

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

-幸運を祈ります。

于 2010-12-26T04:34:21.207 に答える