2016-03-31 5 views
6

У меня есть функция «экспорт в слово» в моем приложении. Он работает отлично. Я использую контент gridview, экспортируемый в файл слова.Добавить заголовок/нижний колонтитул в экспортированном файле слова из ASP.NET

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

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.

Возможно ли это? Кто-нибудь есть идея для этого?

+0

Вы попробовали Response.AppendHeader –

+0

Ну, я думаю, что response.header предназначен для мета-заголовка файла, а не для заголовка фактического файла. Если у вас есть какой-нибудь пример, пожалуйста, покажи мне. –

+1

Фактически вы не экспортируете файл слов. Вы экспортируете HTML и сохраняете его в файл .doc, чтобы обмануть Word, чтобы открыть его. Вам нужно будет использовать специальные атрибуты и элементы HTML MS Word, чтобы выполнить то, что вы хотите. Самый простой способ - создать документ Word с верхним и нижним колонтитулом, а затем сохранить его как файл HTML. Или рассмотреть возможность переключения на библиотеку, которая генерирует реальные файлы Word, такие как Open XML SDK или DocX. Файлы, генерирующие ваш файл, скорее всего, путают Word-клиенты, которые не ожидают HTML в файле .doc. – mason

ответ

2

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

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

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

Micrsoft предоставляет библиотеку для генерации файлов .DOCX под названием Open XML SDK. Тем не менее, я нашел, что немного сложно использовать.

Я лично использовал DocX несколько раз. Вот как бы сделать это с этой библиотекой (код взят из this blog post):

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 (в переводе Telerik, потому что я не знаю, 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 году. Библиотека, вероятно, изменилась за шесть лет.

+0

Хорошо, я попробую это. Как я могу добавить здесь содержимое моей сетки? –

+0

@PiyushKhatri Я бы не сделал GridView. Вместо этого я бы предоставил базовые данные (например, модель или DataTable, которые вы привязали к GridView). Посмотрите на [опции, которые DocX имеет для встроенных таблиц] (http://cathalscorner.blogspot.com/2010/06/docx-and-tables.html). – mason

Смежные вопросы