Создание документа Word из HTML - PullRequest
1 голос
/ 28 февраля 2012

Я знаю, что на SO есть много других вопросов по этой теме, но мне нужно больше информации.Это вопрос из двух частей к моему требованию: динамически генерировать документ MS Word из HTML и запросить загрузку.

Q1) Из того, что я читаю, кажется, что Microsoft.Office.Interop - этоне предназначен для использования для автоматизации серверов, так как это всего лишь оболочка для приложения, и для его установки потребуется установить Office на веб-сервере.Это правильно?

Я заставил кое-что из этого работать, мне предлагают загрузить, документ Word сохраняет должным образом, но документ показывает мою разметку в качестве содержимого документа, а не визуализированный HTML в качестве содержимого.Из того, что я прочитал, якобы возможно экспортировать HTML в MS Word просто так без необходимости использования сторонних инструментов или компонентов.Я также хотел бы избегать формата Open XML, так как не могу гарантировать, какая версия Word у моих пользователей.

Q2) Чего мне не хватает здесь, чтобы появился мой HTMLотображается в выходном файле MS Word?doc.DocumentBody - это тип string, который содержит весь HTML-документ.

    public FileStreamResult DownloadDocument(string id)
    {
        /* pseudo-code here to fetch my custom "Document" object from DB */
        Document doc = DocumentService.FindById(id);

        var fileName = string.Format("{0}.doc", doc.Title);
        Response.AddHeader("Content-Disposition", "inline;filename=" + fileName);
        return new FileStreamResult(WordStream(doc.DocumentBody), "application/msword");
    }

    private static Stream WordStream(string body)
    {
        var ms = new MemoryStream();

        byte[] byteInfo = Encoding.ASCII.GetBytes(body);
        ms.Write(byteInfo, 0, byteInfo.Length);
        ms.Position = 0;

        return ms;
    }

Ответы [ 3 ]

3 голосов
/ 28 февраля 2012

Я использовал по сути тот же код, что и вы, чтобы загрузить html как текстовые документы, и он отлично работает.Я изменил свой код так, чтобы он был таким же, как ваш, для тестирования, и он все еще работал нормально, поэтому мне интересно, действительно ли проблема связана с вашим HTML.

Посмотрите на doc.DocumentBody в вашем отладчике,и посмотреть, если это действительный HTML.

Обернуто ли оно в <html><body></body></html>?

У меня был тест - думаю, если вы пропустите теги body, вы в конечном итоге увидите необработанный html.

2 голосов
/ 28 февраля 2012

Microsoft.Office.Interop не предназначен для использования для автоматизации серверов, поскольку это всего лишь оболочка для приложения, для которой требуется установить Office на веб-сервере. Это правильно?

Да.

Чего мне не хватает, чтобы мой HTML отображался в выходном файле MS Word?

Ну, конечно, вам нужно создать документ Word! Формат файла Word и формат файла HTML различаются.

Есть несколько очень хороших коммерческих библиотек, которые предоставляют хороший API для программной генерации документов Office. С Office XML это не совсем по необходимости - теперь гораздо удобнее генерировать XML, который Word умеет читать .

2 голосов
/ 28 февраля 2012
  1. да, а запущенные приложения Office на сервере без пользовательского интерфейса не поддерживаются . (Примечание: «не поддерживается» не означает, что оно не будет работать, но просто не дает никаких гарантий).

  2. используйте метод File для возврата файла - http://msdn.microsoft.com/en-us/library/dd505200.aspx, Проверьте этот популярный ответ - Как мне представить файл для загрузки с контроллера MVC? .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...