Arhn - архитектура программирования

Добавить верхний/нижний колонтитул в экспортированный файл Word из ASP.NET

У меня есть функция «экспорт в слово» в моем приложении. Это работает отлично. Я использую содержимое gridview, экспортированное в файл Word.

Теперь я хочу добавить верхний/нижний колонтитул в экспортированный файл слова, который создается из приведенного ниже кода:

Dim fileName As String = "Test_" & Format(DateTime.Now, "MMddyyyyhhmmss") & ".doc"
Dim sw As New StringWriter()
Dim w As New HtmlTextWriter(sw)
gvContent.RenderControl(w)
Dim content As String = sw.GetStringBuilder().ToString()
Response.Clear()
Response.AddHeader("Content-Disposition", "attachment; filename=" & fileName)
Response.Charset = ""
Response.ContentType = "application/vnd.ms-word"
Response.Write(finalContent)
Response.Flush()
Response.End()

Кроме того, верхний и нижний колонтитулы должны отображаться на всех страницах файла Word, точно так же, как при использовании функции верхнего и нижнего колонтитула Word.

Является ли это возможным? У кого-нибудь есть идея для этого?

31.03.2016

  • Вы пробовали Response.AppendHeader 05.04.2016
  • Ну, я думаю, что response.header предназначен для мета-заголовка файла, а не для фактического заголовка файла. Если у вас есть пример, пожалуйста, покажите мне. 05.04.2016
  • На самом деле вы не экспортируете текстовый файл. Вы экспортируете HTML и сохраняете его в файл .doc, чтобы заставить Word открыть его. Вам нужно будет использовать специальные HTML-атрибуты и элементы MS Word, чтобы выполнить то, что вы хотите. Вероятно, самым простым способом было бы создать документ Word с верхним и нижним колонтитулами, а затем сохранить его как файл HTML. Или рассмотреть возможность перехода на библиотеку, которая создает настоящие файлы Word, например Open XML SDK или DocX. Файлы, которые вы создаете, скорее всего, запутают клиентов Word, которые не ожидают HTML в файле .doc. 05.04.2016
  • Вы правы, я пытался, но не нашел ни одного примера создания файла слова с верхним/нижним колонтитулом. Так что все еще ищу решение. 05.04.2016
  • После быстрой проверки Word никогда не включал верхний и нижний колонтитулы, когда я сохранял их в виде HTML-файла. Возможно, это означает, что он не поддерживает верхние и нижние колонтитулы из HTML. Лучше всего было бы создать настоящие файлы Word, как описано в моем предыдущем комментарии. 05.04.2016
  • Правда, странное требование от клиента. Я пытался убедить его, но он хочет этого любым способом :( 05.04.2016

Ответы:


1

На самом деле вы создаете HTML-файл и даете ему расширение, которое Word умеет открывать. Вы не создаете настоящий файл .DOC, но Word распознает HTML и отобразит его.

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

Что вы можете сделать, так это переключиться на создание реальных файлов MS Word. Они будут лучше поддерживаться в различных клиентах Word и эквивалентах Word (таких как версии для Mac, мобильные версии и Libre Office).

Microsoft предоставляет библиотеку для создания файлов .DOCX, которая называется Open XML SDK. Однако я обнаружил, что это немного сложно использовать.

Я лично использовал DocX несколько раз. Вот как это можно сделать с помощью этой библиотеки (код взят из этот пост в блоге) ):

C#

// Create a new document.
using (DocX document = DocX.Create(@"Test.docx"))
{
    // Add Header and Footer support to this document.
    document.AddHeaders();
    document.AddFooters();

    // Get the default Header for this document.
    Header header_default = document.Headers.odd;

    // Get the default Footer for this document.
    Footer footer_default = document.Footers.odd;

    // Insert a Paragraph into the default Header.
    Paragraph p1 = header_default.InsertParagraph();
    p1.Append("Hello Header.").Bold();

    // Insert a Paragraph into the document.
    Paragraph p2 = document.InsertParagraph();
    p2.AppendLine("Hello Document.").Bold();

    // Insert a Paragraph into the default Footer.
    Paragraph p3 = footer_default.InsertParagraph();
    p3.Append("Hello Footer.").Bold();

    // Save all changes to this document.
    document.Save();
}// Release this document from memory.

VB.NET (в переводе Телерика, потому что я не знаю VB.NET)

' Create a new document.
Using document As DocX = DocX.Create("Test.docx")
    ' Add Header and Footer support to this document.
    document.AddHeaders()
    document.AddFooters()

    ' Get the default Header for this document.
    Dim header_default As Header = document.Headers.odd

    ' Get the default Footer for this document.
    Dim footer_default As Footer = document.Footers.odd

    ' Insert a Paragraph into the default Header.
    Dim p1 As Paragraph = header_default.InsertParagraph()
    p1.Append("Hello Header.").Bold()

    ' Insert a Paragraph into the document.
    Dim p2 As Paragraph = document.InsertParagraph()
    p2.AppendLine("Hello Document.").Bold()

    ' Insert a Paragraph into the default Footer.
    Dim p3 As Paragraph = footer_default.InsertParagraph()
    p3.Append("Hello Footer.").Bold()

    ' Save all changes to this document.
    document.Save()
End Using
' Release this document from memory.

Обратите внимание, что приведенный выше код был взят из сообщения в блоге, написанного в 2010 году. Скорее всего, библиотека претерпела изменения за прошедшие шесть лет.

05.04.2016
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..