Сохранение и экспорт документов

Сохранение и экспорт документов

Сохранение и экспорт документов

Document.Save записывает документ в файл или поток в целевом формате. Формат либо выводится из расширения файла, явно задаётся как значение SaveFormat, либо управляется подклассом SaveOptions — OoxmlSaveOptions, MarkdownSaveOptions или TxtSaveOptions — для управления, специфичного для формата. В данном руководстве рассматриваются перегрузки Save, перечисление SaveFormat, параметры сохранения OOXML, экспорт в Markdown и обычный текст, а также определение формата перед конвертацией.


Сохранение с помощью Document.Save

Самый простой вызов, Document.Save(fileName), выводит целевой формат из расширения файла. Save(fileName, saveFormat) делает формат явным независимо от расширения, а Save(fileName, saveOptions) (или соответствующие перегрузки Stream) принимает подкласс SaveOptions для настройки, специфичной для формата. SaveOptions.CreateSaveOptions(saveFormat) — статическая фабрика, возвращающая нужный подкласс параметров для заданного SaveFormat с уже установленными значениями по умолчанию.


Выбор формата с помощью SaveFormat

Перечисление SaveFormat содержит все идентификаторы форматов сохранения, которые распознаёт библиотека. Document.Save полностью записывает как в, так и из основных форматов документов этого издания — DOCX, DOCM, DOTX, DOTM и Flat OPC (включая их варианты с поддержкой макросов и шаблоны), а также Markdown и обычный текст. FileFormatUtil.SaveFormatToExtension(saveFormat) и ExtensionToSaveFormat(extension) преобразуют между перечислением и строкой расширения файла.

Некоторые значения SaveFormat присутствуют в перечислении для полноты API, но соответствуют форматам, для которых в этой упрощённой открытой версии не реализованы работающие чтение или запись — попытка сохранить в один из таких форматов приводит к выводу, не эквивалентному исходному документу. Оставайтесь в рамках форматов, указанных выше, для надёжного обратного преобразования.


Параметры OOXML: DOCX, DOCM, DOTX, DOTM и Flat OPC

OoxmlSaveOptions настраивает сохранение в любой из форматов Open XML. Его свойство SaveFormat выбирает, какой конкретный вариант записывать; Password задает открытый пароль для сохраняемого файла (независимо от ограничений редактирования Document.Protect); Compliance выбирает уровень строгой совместимости OOXML; а CompressionLevel / Zip64Mode управляют базовой упаковкой ZIP. Создайте её с помощью new OoxmlSaveOptions(saveFormat) или через SaveOptions.CreateSaveOptions(saveFormat).


Экспорт в Markdown

MarkdownSaveOptions управляет экспортом в Markdown: ListExportMode и LinkExportMode определяют, как отображаются списки и гиперссылки, ImagesFolder / ImagesFolderAlias контролируют, куда записываются извлечённые изображения и как они ссылаются, ExportImagesAsBase64 вместо этого встраивает их непосредственно, а TableContentAlignment влияет на разметку генерируемых таблиц. Передайте экземпляр MarkdownSaveOptions в Document.Save(fileName, saveOptions) с именем файла .md, либо явно задайте его SaveFormat.


Экспорт в простой текст

TxtSaveOptions (через его базовый TxtSaveOptionsBase, общий с MarkdownSaveOptions) управляет экспортом в простой текст: Encoding задаёт кодировку символов, ParagraphBreak задаёт строку окончания строки, MaxCharactersPerLine переносит длинные строки, SimplifyListLabels нормализует маркеры/номера списков до простых символов, а PreserveTableLayout пытается выравнивать столбцы таблиц с помощью пробелов.


Определение формата перед конвертацией

Перед конвертацией файла, формат которого вам неизвестен, FileFormatUtil.DetectFileFormat(fileName) возвращает FileFormatInfo с обнаруженным LoadFormat. Скомбинируйте это с FileFormatUtil.LoadFormatToSaveFormat(loadFormat), чтобы решить, возможен ли круговой проход через поддерживаемые этим изданием форматы, перед попыткой выполнить Document.Save.


Советы и лучшие практики

  • Используйте Save(fileName, saveOptions) вместо простого перегрузки Save(fileName, saveFormat), когда нужно управлять поведением, зависящим от формата, например рендерингом списков Markdown или сжатием OOXML.
  • Установите OoxmlSaveOptions.Password для файла, защищённого открытым паролем; это отличается от Document.Protect, который ограничивает редактирование, но не шифрует файл.
  • Выберите MarkdownSaveOptions.ExportImagesAsBase64 для одного автономного файла Markdown или ImagesFolder, если нужен каталог с извлечёнными файлами изображений рядом с Markdown.
  • Вызовите SaveOptions.CreateSaveOptions(saveFormat) вместо ручного выбора конкретного класса опций, когда целевой формат определяется во время выполнения.
  • Проверьте целевой формат с помощью FileFormatUtil перед конвертацией, а не полагайтесь только на расширение файла, которое может быть неверным или вводящим в заблуждение.

Распространённые проблемы

ПроблемаПричинаИсправление
Save(fileName) выбирает неправильный форматРасширение файла не соответствует предполагаемому форматуИспользуйте Save(fileName, saveFormat) или Save(fileName, saveOptions), чтобы явно указать формат
Сохранённый файл OOXML не откроется с паролемOoxmlSaveOptions.Password не был установлен перед сохранениемСоздайте OoxmlSaveOptions, задайте Password и передайте его в Save
Экспорт в Markdown неожиданно разбросывает файлы изображенийПоведение по умолчанию MarkdownSaveOptions извлекает изображения в файлыУстановите ExportImagesAsBase64 = true для одного автономного файла, либо установите ImagesFolder, чтобы контролировать, куда сохраняются изображения
Экспорт в простой текст теряет выравнивание столбцов таблицыTxtSaveOptions.PreserveTableLayout оставлен по умолчаниюУстановите PreserveTableLayout = true перед сохранением

FAQ

Как сохранить документ в определённом формате, независимо от его расширения файла?

Вызовите Save(fileName, saveFormat) с явным значением SaveFormat, или Save(fileName, saveOptions) с соответствующим подклассом SaveOptions.

Какие форматы эта версия читает и записывает в обеих направлениях?

DOCX, DOCM, DOTX, DOTM, Flat OPC (плюс его варианты с макросами и шаблоны), Markdown и простой текст.

Как установить пароль на сохранённый файл?

Установите Password в экземпляре OoxmlSaveOptions и передайте его в Document.Save(fileName, saveOptions).

Как управлять переводами строк в экспортированном текстовом файле?

Установите ParagraphBreak в экземпляре TxtSaveOptions перед сохранением.

Как проверить, в каком формате файл находится перед его конвертацией?

Вызовите FileFormatUtil.DetectFileFormat(fileName) и прочитайте возвращённый FileFormatInfo.LoadFormat.


API Reference Сводка

Класс/МетодОписание:
Document.SaveЗаписывает документ в файл, поток или целевой вывод в выбранном формате.
SaveFormatПеречисление, определяющее целевой формат для операции сохранения.
SaveOptionsАбстрактный базовый класс для конфигурации сохранения, специфичной для формата; CreateSaveOptions(saveFormat) возвращает соответствующий подкласс.
OoxmlSaveOptionsПараметры для DOCX, DOCM, DOTX, DOTM и Flat OPC — пароль, соответствие требованиям, сжатие.
MarkdownSaveOptionsПараметры экспорта Markdown — отображение списков/ссылок, обработка изображений.
TxtSaveOptions / TxtSaveOptionsBaseПараметры экспорта простого текста — кодировка, разрывы строк, расположение таблицы.
FileFormatUtil.DetectFileFormatОпределяет формат файла перед его загрузкой или преобразованием.
FileFormatUtil.SaveFormatToExtension / ExtensionToSaveFormatПреобразует между значением SaveFormat и расширением файла.

См. также:

 Русский