Как сжать rtf файл

Обновлено: 06.07.2024

У нас есть код, который создает документ RTF из шаблона RTF. Он в основном выполняет поиск по строкам и заменяет специальные теги в файле RTF. Это доступно через веб-страницу.

Как правило, это очень короткое время.

Однако нам нужно встроить изображение в шаблон. Мы встраивали их как изображения JPEG с помощью функции Word «Вставить / Изображение / Из файла . ». Но мы обнаружили, что размер результирующего файла RTF во многом зависит от изображения.

Например, я вставил логотип в формате JPEG размером 20k (который в основном представляет собой сплошной фон с некоторым текстом). Размер файла RTF увеличился с 390 КБ (без изображения) до 510 КБ (с изображением).

Затем мы вставили JPEG, содержащий снимок экрана, т.е. изображение содержит текст, несколько цветов и т. Д. JPEG составляет около 150 КБ. Используя это изображение, размер файла RTF увеличился с 390 КБ до 3,5 МБ.

Таким образом, кодировка, которую Word использует для хранения изображений в RTF, не работает линейно. Я предполагаю, что это зависит от того, что находится в изображении JPEG.

Мне нужно свести размер шаблонов RTF к минимуму, чтобы попытаться свести к минимуму время обработки файлов.

  • Есть ли у кого-нибудь идеи, как минимизировать размер файлов RTF со встроенными изображениями?
  • Есть ли способ контролировать кодировку, которую использует Word? Я нигде не вижу никаких вариантов.
  • Кто-нибудь знает, какой тип двоичного кодирования использует Word / RTF?

Изображение в файле RTF сохраняется в несжатом формате WMF. На Mac это будет macpict. Лучше всего сохранить размер файла меньшим - это связать изображение с документом, а не вставлять копию в документ. Компромисс заключается в том, что вам нужно хранить файлы вместе.

ИЗМЕНИТЬ Можно ли сжимать RTF? Используя zip / rar, вы вернете свой размер файла, но, очевидно, сначала вам придется распаковать его. Предполагается, что существуют инструменты, которые будут выполнять сжатие rtf, но я никогда ими не пользовался.

Вот лучшее решение

СИМПТОМЫ

Когда вы сохраняете документ Microsoft Word, содержащий EMF, PNG, GIF или JPEG как другой формат файла (например, Word 6.0 / 95 ( .doc) или Rich Text Format ( .rtf)), размер файла документ может резко увеличиться.

Например, документ Microsoft Word 2000, содержащий файл JPEG изображение, сохраненное как документ Word 2000, может иметь размер файла 45 568 байт (44,5 КБ). Однако при сохранении этого файла как Word 6.0 / 95 ( .doc) или в формате Rich Text Format ( .rtf), размер файла может увеличиться до 1,289,728 байт (1,22 МБ).

ПРИЧИНА

Эта функция предусмотрена в Microsoft Word. Если в документ Word вставляется изображение в формате EMF, PNG, GIF или JPEG, при сохранении документа в документе сохраняются две копии изображения. Графика сохраняется в соответствующем формате EMF, PNG, GIF или JPEG, а также конвертируется в формат WMF (метафайл Windows).

РАЗРЕШЕНИЕ

Предупреждение. Неправильное использование редактора реестра может вызвать серьезные проблемы, которые могут потребовать переустановки операционной системы. Microsoft не может гарантировать, что вы сможете решить проблемы, возникшие в результате неправильного использования редактора реестра. Используйте редактор реестра на свой страх и риск.

Чтобы Word не сохранил две копии изображения в документе и чтобы уменьшить размер файла документа, добавьте строковое значение ExportPictureWithMetafile = 0 в реестр Microsoft Windows.

Мы проделали аналогичный проект на работе. Только мы не используем функцию «Вставить / Изображение / Из файла . ». В нашем шаблоне есть тег с именем [photos], как и в вашем собственном. При обработке документа мы заменяем тег кодами RTF, необходимыми для отображения изображений. Мы помещаем их в таблицу и отображаем по два изображения в каждой строке плюс строку сверху для заголовка.

Итак, вы можете разместить тег [фотографии] в своем шаблоне. Затем вы заменяете тег кодами RTF. Вы можете найти хорошие ссылки на эти коды в Интернете. Например, здесь .

Теперь мой код выглядит примерно так:

Если вы помещаете свое изображение в массив байтов, вы можете использовать BitConverter.ToString (array), чтобы получить свой шестнадцатеричный код. только вам нужно заменить тире "-" на "";

Наши файлы будут занимать менее 1/10 места, чем "нормальный" RTF. Если мы откроем код документа с помощью редактора, такого как Notepad ++, мы сможем увидеть коды RTF, но если мы откроем документ и сохраним его как RTF (изменив его имя), он увеличится с 1,5 МБ до 50 МБ !! Я предполагаю, что ответ ДэйваПарилло оправдывает это: я пишу каждое изображение только один раз.

Надеюсь, поможет. Ура, приятель

Изначально имейте в виду, что каждый байт хранится с использованием 2 символов (двух байтов), это означает, что приращение по крайней мере равно двойному размеру исходного изображения.

Еще вам нужно, чтобы Word и Word Pad вставляли разные (разновидности или форматы) одного и того же изображения плюс другие поля (этот RTF может отображаться без них).

Ответ Swartbees отлично сработал для меня. Сначала я снизил качество изображения до «0» с помощью G.I.M.P. Сохранить как функцию jpeg. После решения Microsoft, предложенного Swartbees выше, я повторно вставил изображение в файл, и увеличение размера было незначительным с 229k до 279k (в отличие от 29000kb).

Спасибо за ваши предложения, ребята.

Да, удалив лишние символы. И для этого вы должны вставить их обратно в свой поток. Например, если у вас более двадцати символов f в одной строке, вы можете заменить его на f [20] в своем потоке. Это начало.

Читайте также: