Подтвердить что ты не робот

Преобразование Html в Docx в С#

Я хочу преобразовать html-страницу в docx в С#, как я могу это сделать?

4b9b3361

Ответ 1

Используя этот код для преобразования

Microsoft.Office.Interop.Word.Application word = 
    new Microsoft.Office.Interop.Word.Application();
Microsoft.Office.Interop.Word.Document wordDoc = 
    new Microsoft.Office.Interop.Word.Document();
Object oMissing = System.Reflection.Missing.Value;
wordDoc = word.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing);
word.Visible = false;
Object filepath = "c:\\page.html";
Object confirmconversion = System.Reflection.Missing.Value;
Object readOnly = false;
Object saveto = "c:\\doc.pdf";
Object oallowsubstitution = System.Reflection.Missing.Value;

wordDoc = word.Documents.Open(ref filepath, ref confirmconversion, 
    ref readOnly, ref oMissing,
    ref oMissing, ref oMissing, ref oMissing, ref oMissing,
    ref oMissing, ref oMissing, ref oMissing, ref oMissing,
    ref oMissing, ref oMissing, ref oMissing, ref oMissing);
 object fileFormat = WdSaveFormat.wdFormatPDF;
 wordDoc.SaveAs(ref saveto, ref fileFormat, ref oMissing, ref oMissing, ref oMissing,
     ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
     ref oMissing, ref oMissing, ref oMissing, ref oallowsubstitution, ref oMissing,
     ref oMissing);

Ответ 2

Ниже делается то же самое, что и код Luis, но немного читаем и применяем к приложению ASP.NET MVC:

var word = new Microsoft.Office.Interop.Word.Application();
word.Visible = false;

var filePath = Server.MapPath("~/MyFiles/Html2PdfTest.html");
var savePathPdf = Server.MapPath("~/MyFiles/Html2PdfTest.pdf");
var wordDoc = word.Documents.Open(FileName: filePath, ReadOnly: false);
wordDoc.SaveAs2(FileName: savePathPdf, FileFormat: WdSaveFormat.wdFormatPDF);

вы также можете сохранить в других форматах, таких как docx, как это:

var savePathDocx = Server.MapPath("~/MyFiles/Html2PdfTest.docx");
var wordDoc = word.Documents.Open(FileName: filePath, ReadOnly: false);
wordDoc.SaveAs2(FileName: savePathDocx, FileFormat: WdSaveFormat.wdFormatXMLDocument);

Ответ 4

В моем решении используется Html2OpenXml вместе с DocumentFormat.OpenXml (пакет NuGet для Html2OpenXml здесь), чтобы обеспечить элегантное решение для ASP.NET MVC.

WordHelper.cs

public static class WordHelper
{
    public static byte[] HtmlToWord(String html)
    {
        const string filename = "test.docx";
        if (File.Exists(filename)) File.Delete(filename);

        using (MemoryStream generatedDocument = new MemoryStream())
        {
            using (WordprocessingDocument package = WordprocessingDocument.Create(
                   generatedDocument, WordprocessingDocumentType.Document))
            {
                MainDocumentPart mainPart = package.MainDocumentPart;
                if (mainPart == null)
                {
                    mainPart = package.AddMainDocumentPart();
                    new Document(new Body()).Save(mainPart);
                }

                HtmlConverter converter = new HtmlConverter(mainPart);
                Body body = mainPart.Document.Body;

                var paragraphs = converter.Parse(html);
                for (int i = 0; i < paragraphs.Count; i++)
                {
                    body.Append(paragraphs[i]);
                }

                mainPart.Document.Save();
            }

            return generatedDocument.ToArray();
        }
    }
}

Controller

    [HttpPost]
    [ValidateInput(false)]
    public FileResult Demo(CkEditorViewModel viewModel)
    {
        return File(WordHelper.HtmlToWord(viewModel.CkEditorContent),
          "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
    }

Я использую CKEditor для генерации HTML для этого примера.

Ответ 6

Aspose.Words для .NET - это коммерческий компонент, позволяющий вам достичь этого.

Ответ 7

MigraDoc может помочь. Или используйте VS-инструменты для Office. Или подключение к Office через COM.

Ответ 8

Вы можете использовать PHPDocX, который предлагает очень удобный инструмент для преобразования HTML файлов и/или строк HTML в WordML.

У них есть много вариантов:

  • вы можете отфильтровать с помощью селектора стилей CSS, какие куски HTML должны быть вставлен в документ Word.
  • Вы можете выбрать, загрузите изображение или letthem как внешние ссылки.
  • Он анализирует HTML-формы.
  • Вы можете использовать собственные стили Word для таблиц и абзацев, перезаписывающих исходный CSS.
  • Преобразует привязки HTML в закладки Word.
  • и так далее

Надеюсь, вы сочтете это полезным: -)

Ответ 9

Использование офисных приложений на веб-сервере не рекомендуется Microsoft. однако это можно сделать довольно легко, используя OpenXML 2.5

Все, что вам нужно сделать, это разделить HTML на ( "<", " > " ) затем для каждой части переместите его в переключатель и определите, является ли он тегом HTML или нет.

Затем для каждой части вы можете начать преобразовывать HTML в "Run" и "RunProperties", а текст без HTML просто помещается в "Текст"

Звучит сложнее, чем есть... и да, я понятия не имею, почему нет такого кода, который можно было бы сделать именно так.

Вещи, о которых нужно помнить. Эти два формата не преобразуются друг в друга, поэтому, если вы сосредоточитесь на самом чистом коде, вы столкнетесь с проблемой, когда формат его сам становится беспорядочным.