Сохранение и экспорт документов
Сохранение и экспорт документов
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 и расширением файла. |