Сохранить HTML-документ в C#

Чтобы сохранить HTML-документ в C#, создайте или загрузите HTMLDocument, при необходимости обновите DOM и вызовите HTMLDocument.Save(). Используйте HTMLSaveOptions, когда нужно управлять сохранением связанных ресурсов, или HTMLSaveFormat, когда HTML сохраняется как MHTML или Markdown.

После загрузки существующего файла или создания HTML-документа с нуля можно сохранить изменения с помощью одного из методов HTMLDocument.Save(). Aspose.HTML for .NET предоставляет перегрузки для сохранения документа в файл, URL, поток или пользовательский обработчик ресурсов.

Эта статья посвящена основным сценариям сохранения HTML-подобных документов: сохранению HTML-файла, сохранению HTML как MHTML или Markdown и сохранению SVG-документов. Если документ содержит связанные CSS, изображения, скрипты или требует пользовательского хранилища вывода, см. статью Сохранить HTML с ресурсами.

API предлагает два связанных, но разных подхода к созданию выходных данных:

Как работает HTMLDocument.Save()

Класс HTMLDocument представляет HTML-документ в памяти. После создания или загрузки документа и изменения через DOM вызовите одну из перегрузок Save(), чтобы записать текущее состояние документа в выходной результат.

APIДля чего использовать
HTMLDocument.Save()Сохраняет текущий HTML-документ в файл, URL, поток или обработчик ресурсов в зависимости от перегрузки.
SaveOptionsЗадает базовые параметры сохранения и доступ к ResourceHandlingOptions для связанных ресурсов.
ResourceHandlingOptionsУправляет обработкой связанных ресурсов. Поведение Default равно Save, то есть ресурсы сохраняются как файлы, когда применяется сохранение ресурсов.
HTMLSaveFormatВыбирает формат сохранения HTML, например HTML, MHTML или Markdown, при использовании перегрузок с форматом.
SVGDocumentПредставляет SVG-документы и поддерживает похожие сценарии загрузки, редактирования и сохранения.

Сохранить HTML в файл

Самый простой сценарий сохранения – создать HTML-документ, добавить содержимое и сохранить его как локальный .html файл. Это удобно, когда вы программно генерируете HTML или изменяете существующий документ и хотите записать результат на диск.

Чтобы сохранить HTML-документ в файл на C#:

  1. Создайте экземпляр класса HTMLDocument.
  2. Создайте содержимое методами DOM, например CreateTextNode().
  3. Добавьте созданные узлы в тело документа.
  4. Вызовите Save(path), чтобы записать документ в локальный HTML-файл.

Следующий пример C# показывает самый простой способ сохранить HTML-файл:

 1// Save HTML to a file using C#
 2
 3// Prepare an output path for a document saving
 4string documentPath = Path.Combine(OutputDir, "save-to-file.html");
 5
 6// Initialize an empty HTML document
 7using (HTMLDocument document = new HTMLDocument())
 8{
 9    // Create a text element and add it to the document
10    Text text = document.CreateTextNode("Hello, World!");
11    document.Body.AppendChild(text);
12
13    // Save the HTML document to the file on a disk
14    document.Save(documentPath);
15}

В примере выше конструктор HTMLDocument() инициализирует пустой HTML-документ. Метод CreateTextNode(data) создает текстовый узел, а Save(path) записывает документ по указанному пути.

Для документов, которые ссылаются на CSS, изображения, скрипты или другие файлы, сохранения только основного HTML-файла часто недостаточно. Используйте Сохранить HTML с ресурсами, когда нужно сохранить связанные файлы вместе с документом.

Сохранить HTML как MHTML или Markdown

Перечисление HTMLSaveFormat задает формат, в котором сохраняется HTML-документ. Его используют, когда нужен HTML-подобный выходной формат, а не отрендеренный PDF, XPS, DOCX или изображение.

Сохранить HTML в MHTML

В некоторых случаях нужно сохранить веб-страницу как один файл. MHTML – формат веб-архива, который хранит HTML и связанные ресурсы внутри одного файла. Следующий пример показывает, как использовать Save(path, saveFormat) для сохранения HTML в MHTML.

Чтобы сохранить HTML как MHTML на C#:

  1. Загрузите или создайте HTMLDocument.
  2. Выберите выходной путь MHTML.
  3. Вызовите document.Save(path, HTMLSaveFormat.MHTML).
  4. Используйте созданный .mht файл как однофайловый веб-архив.
 1// Save HTML as MHTML using C#
 2
 3// Prepare an output path for a document saving
 4string savePath = Path.Combine(OutputDir, "save-to-mhtml.mht");
 5
 6// Prepare a simple HTML file with a linked document
 7File.WriteAllText("save-to-mhtml.html", "<p>Hello, World!</p>" +
 8                                        "<a href='linked-file.html'>linked file</a>");
 9
10// Prepare a simple linked HTML file
11File.WriteAllText("linked-file.html", "<p>Hello, linked file!</p>");
12
13// Load the "save-to-mhtml.html" into memory
14using (HTMLDocument document = new HTMLDocument("save-to-mhtml.html"))
15{
16    // Save the document to MHTML format
17    document.Save(savePath, HTMLSaveFormat.MHTML);
18}

Сохраненный файл save-to-mhtml.mht содержит HTML из save-to-mhtml.html и связанный файл linked-file.html.

Сохранить HTML в Markdown

Markdown – язык разметки с простым текстовым синтаксисом. Используйте HTMLSaveFormat для сохранения HTML в Markdown, когда нужен редактируемый Markdown-вывод из HTML-документа.

Чтобы сохранить HTML как Markdown на C#:

  1. Загрузите или создайте HTMLDocument.
  2. Выберите выходной путь Markdown.
  3. Вызовите document.Save(path, HTMLSaveFormat.Markdown).
  4. Используйте созданный .md файл в Markdown-документации или других контент-сценариях.
 1// Save HTML as Markdown using C#
 2
 3// Prepare an output path for a document saving
 4string documentPath = Path.Combine(OutputDir, "save-html-to-markdown.md");
 5
 6// Prepare HTML code
 7string html_code = "<H2>Hello, World!</H2>";
 8
 9// Initialize a document from a string variable
10using (HTMLDocument document = new HTMLDocument(html_code, "."))
11{
12    // Save the document as a Markdown file
13    document.Save(documentPath, HTMLSaveFormat.Markdown);
14}

Для сценариев конвертации HTML в Markdown через API конвертации и настройки преобразования см. Преобразование HTML в Markdown.

Сохранить SVG-документы

Обычно SVG встречается как часть HTML-файла и используется для векторной графики: изображений, иконок, диаграмм или схем. Но SVG также можно загрузить и обрабатывать как самостоятельный документ.

Поскольку SVGDocument и HTMLDocument основаны на одном стандарте WHATWG DOM, сценарии загрузки, чтения, редактирования, конвертации и сохранения похожи для обоих типов документов.

Чтобы сохранить SVG-документ на C#:

  1. Создайте или загрузите SVGDocument.
  2. При необходимости измените SVG DOM.
  3. Вызовите метод Save() с целевым путем к файлу.
  4. Используйте сохраненный .svg файл как самостоятельный векторный документ.
 1// Create and save SVG image using C#
 2
 3// Prepare an output path for a document saving
 4string documentPath = Path.Combine(OutputDir, "create-and-save-svg.svg");
 5
 6// Prepare SVG code
 7string code = @"
 8    <svg xmlns='http://www.w3.org/2000/svg' height='200' width='300'>
 9        <g fill='none' stroke-width= '10' stroke-dasharray='30 10'>
10            <path stroke='red' d='M 25 40 l 215 0' />
11            <path stroke='black' d='M 35 80 l 215 0' />
12            <path stroke='blue' d='M 45 120 l 215 0' />
13        </g>
14    </svg>";
15
16// Initialize an SVG instance from the content string
17using (SVGDocument document = new SVGDocument(code, "."))
18{
19    // Save the SVG file to a disk
20    document.Save(documentPath);
21}

Дополнительные сведения об основах SVG, рисовании и использовании API для обработки и рендеринга SVG-документов см. в документации Aspose.SVG for .NET.

Типичные проблемы при сохранении HTML

ПроблемаПричинаРешение
В сохраненном HTML нет изображений или CSSБыл сохранен только основной HTML-файл, или связанные ресурсы не обработаны как требуется.Используйте SaveOptions и сценарии обработки ресурсов из статьи Сохранить HTML с ресурсами.
Ожидается MHTML, но создается .html файлИспользована перегрузка сохранения без HTMLSaveFormat.MHTML.Используйте Save(path, HTMLSaveFormat.MHTML), когда нужен однофайловый веб-архив.
Markdown-вывод отличается от внешнего вида отрендеренной страницыMarkdown хранит структуру и текст документа, а не визуальное представление.Используйте Markdown для редактируемого контента, а для PDF, изображений и фиксированной верстки применяйте конвертацию или рендеринг.
Изменения SVG не сохраненыSVGDocument был изменен в памяти, но Save() не вызвали с целевым путем.Сохраните SVG-документ после завершения изменений DOM.

FAQ

Как сохранить HTML-документ в C#?

Создайте или загрузите HTMLDocument, при необходимости измените его и вызовите document.Save(path), чтобы записать документ в локальный файл.

В чем разница между сохранением и рендерингом?

Сохранение оставляет HTML-подобный формат документа и использует SaveOptions. Рендеринг создает визуальный результат, например PDF, XPS, DOCX или изображения, и использует параметры рендеринга.

Можно ли сохранить HTML как один файл?

Да. Используйте HTMLSaveFormat.MHTML, чтобы сохранить HTML как MHTML веб-архив, когда рабочему процессу нужен один файл.

Можно ли сохранить HTML как Markdown?

Да. Используйте HTMLSaveFormat.Markdown, когда нужен Markdown-вывод из HTML-документа.

Другие платформы

Связанные статьи

Полные примеры C# и файлы данных доступны в репозитории Aspose.HTML for .NET на GitHub.