Change fields to export HTML to Word

Actual export is not a problem:

Response.Clear(); Response.ClearHeaders(); Response.Buffer = true; Response.ContentType = "application/msword"; Response.AddHeader("Pragma", "public"); Response.AddHeader("Expires", "0"); Response.AddHeader("Content-Type", "application/word"); Response.AddHeader("content-disposition", String.Format("attachment;filename={0}.doc", docName)); Response.Charset = "utf-8"; StringWriter sw = new StringWriter(); HtmlTextWriter hw = new HtmlTextWriter(sw); mainbody.RenderControl(hw); Response.Output.Write(sw.ToString()); Response.Flush(); Response.End(); 

So my question is: how to change the fields on the resulting doc?

If I open the loaded word doc, then save it as HTML, the directive defining the fields will be as follows:

 @page WordSection1 { size:8.5in 11.0in; margin:1.0in 1.0in 1.0in 1.0in; mso-header-margin:.5in; mso-footer-margin:.5in; mso-paper-source:0; } 

I am wondering how I can change this in the response headers so that I can correctly display the form on one sheet. Any ideas?

+7
source share
3 answers

This is how I solved it in VB.NET and not in C #. I got the code here :

 divContent.RenderControl(New HtmlTextWriter(New IO.StringWriter(sb))) memoBody = sb.ToString Response.Clear() Response.AddHeader("content-disposition", "attachment;filename=" & fileName & "") Response.ContentType = "application/msword" Dim sbResponseString As New StringBuilder Dim wordHeader as String = "<html xmlns:o=""urn:schemas-microsoft-com:office:office"" " wordHeader &= "xmlns:w=""urn:schemas-microsoft-com:office:word"" " wordHeader &= "xmlns=""http://www.w3.org/TR/REC-html40""> " wordHeader &= "<head><title>Document Title</title>" wordHeader &= "<!--[if gte mso 9]><xml><w:WordDocument><w:View>Print</w:View><w:Zoom>100</w:Zoom>" wordHeader &= "<w:DoNotOptimizeForBrowser/></w:WordDocument></xml><![endif]-->" wordHeader &= "<style> @page Section1 {size:8.5in 11.0in; mso-first-footer:ff1; mso-footer: f1; mso-header: h1; " wordHeader &= "border:solid navy 2.25pt; padding:24.0pt 24.0pt 24.0pt 24.0pt; " wordHeader &= "margin:0.75in 0.50in 0.75in 0.50in ; mso-header-margin:.5in; " wordHeader &= "mso-footer-margin:.5in; mso-paper-source:0;} " wordHeader &= "div.Section1 {page:Section1;} p.MsoFooter, li.MsoFooter, " wordHeader &= "div.MsoFooter{margin:0in; margin-bottom:.0001pt; " wordHeader &= "mso-pagination:widow-orphan; tab-stops:center 3.0in right 6.0in; " wordHeader &= "font-size:12.0pt; font-family:'Arial';} " wordHeader &= "p.MsoHeader, li.MsoHeader, div.MsoHeader {margin:0in; " wordHeader &= "margin-bottom:.0001pt; mso-pagination:widow-orphan; tab-stops:center " wordHeader &= "3.0in right 6.0in; font-size:12.0pt; font-family:'Arial';}--></style></head> " Dim wordBody as String = "<body><div class=Section1>" & memoBody & "</div></body></html>" sbResponseString.Append(wordHeader) sbResponseString.Append(wordBody) Dim newResponseString As String = sbResponseString.ToString Response.Write(newResponseString) Response.End() 
+2
source

Perhaps it would be easier, if your circumstances allow, to release a docx file, which basically consists of several files with zip files, as this will allow you to control aspects of the page layout (and, of course, many other things).

You can then take the rest of your HTML and paste it into the section of the docx file using the altChunk element.

Link: http://www.codeproject.com/Articles/32907/HTML-to-WordML

It works more that you may like, but you get full control over your output.

0
source

I found that the simplest solution in my case using Word 2013 was to combine CSS with saved HTML. This gives me control over the fields and everything I can customize.

Find the option on the Developer tab → Document Template → Associated CSS.

Credit: https://superuser.com/questions/65107/how-to-apply-external-css-stylesheet-to-document-in-microsoft-word/65144#65144

0
source

All Articles