Domanda

I try to generate word document using this code:

    HttpContext.Current.Response.Clear();
    HttpContext.Current.Response.Charset = "";

    HttpContext.Current.Response.ContentType = "application/doc";
    HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; 
    filename=" + DateTime.Now + ".doc");

    var strHTMLContent = new StringBuilder();

    strHTMLContent.Append(
        "<h1 title='Heading' align='Center'style='font-family: verdana; font 
    -size: 80 % ;color: black'><u>Document Heading</u> </h1> ");

    strHTMLContent.Append("<br>");
    strHTMLContent.Append("<table align='Center'>");

    // Row with Column headers
    strHTMLContent.Append("<tr>");
    strHTMLContent.Append("<td style='width:100px; background:# 99CC00'>
   <b>Column1 </b>  </td>");

    strHTMLContent.Append("<td style='width:100px;background:# 99CC00'>
   <b>Column2 </b>  </td>");

    strHTMLContent.Append("<td style='width:100px; background:# 99CC00'>
   <b>Column 3</b></td>");
    strHTMLContent.Append(" </tr> ");

    // First Row Data
    strHTMLContent.Append("<tr>");
    strHTMLContent.Append(
        "<td style='width:100px'></td>");
    strHTMLContent.Append(
        "<td style='width:100px'>b</td>");
    strHTMLContent.Append(
        "<td style='width:100px'>c</td>");
    strHTMLContent.Append("</tr>");

    // Second Row Data
    strHTMLContent.Append("<tr>");
    strHTMLContent.Append(
        "<td style='width:100px'>d</td>");
    strHTMLContent.Append(
        "<td style='width:100px'>e</td>");
    strHTMLContent.Append(
        "<td style='width:100px'>f</td>");
    strHTMLContent.Append("</tr>");

    strHTMLContent.Append("</table>");

    strHTMLContent.Append("<br><br>");
    strHTMLContent.Append(
        "<p align='Center'> Note : This is a dynamically 
                generated word document  </p> ");
    HttpContext.Current.Response.Write(strHTMLContent);
    //  HttpContext.Current.Response.BinaryWrite(strHTMLContent);
    HttpContext.Current.Response.End();
    HttpContext.Current.Response.Flush();

It work fine but I want to make it landscape and in Print Layout cause it appears in Web Layout Can anybody help me?

È stato utile?

Soluzione

I found solution in this post. Solve like this:

Response.Write("<html>")
Response.Write("<head>")
Response.Write("<META HTTP-EQUIV=""Content-Type"" CONTENT=""text/html; 
charset=UTF-8"">")
Response.Write("<meta name=ProgId content=Word.Document>")
Response.Write("<meta name=Generator content=""Microsoft Word 9"">")
Response.Write("<meta name=Originator content=""Microsoft Word 9"">")
Response.Write("<style>")
Response.Write("@page Section1 {size:595.45pt 841.7pt; margin:1.0in 1.25in 1.0in
1.25in;mso-header-margin:.5in;mso-footer-margin:.5in;mso-paper-source:0;}")
Response.Write("div.Section1 {page:Section1;}")
Response.Write("@page Section2 {size:841.7pt 595.45pt;mso-page-orientation:
landscape;margin:1.25in 1.0in 1.25in 1.0in;mso-header-margin:.5in;
mso-footer-margin:.5in;mso-paper-source:0;}")
Response.Write("div.Section2 {page:Section2;}")
Response.Write("</style>")
Response.Write("</head>")
Response.Write("<body>")
Response.Write("<div class=Section2>")

Altri suggerimenti

I solve this, it's work fine for me.

<style>
    @page
    {
        mso-page-border-surround-header: no;
        mso-page-border-surround-footer: no;
    }

    @page Section1
    {
        size:841.9pt 595.3pt;
        mso-page-orientation:landscape;
        margin: 0.7cm 0.7cm 0.7cm 0.7cm;
        mso-header-margin: 42.55pt;
        mso-footer-margin: 49.6pt;
        mso-paper-source: 0;
        layout-grid: 18.0pt;
    }

    div.Section1
    {
        page: Section1;
    }
</style>

<div class="Section1"></div>

For Print layout use this code....

string strBody = string.Empty;
 strBody = @"<html xmlns:o='urn:schemas-microsoft-com:office:office' " +
 "xmlns:w='urn:schemas-microsoft-com:office:word'" +
 "xmlns='http://www.w3.org/TR/REC-html40'>";

 strBody = strBody + "<!--[if gte mso 9]>" +
 "<xml>" +
 "<w:WordDocument>" +
 "<w:View>Print</w:View>" +
 "<w:Zoom>100</w:Zoom>" +
 "</w:WordDocument>" +
 "</xml>" +
 "<![endif]-->";
 HttpContext.Current.Response.Clear();
 HttpContext.Current.Response.Charset = "";
 HttpContext.Current.Response.ContentType = "application/vnd.ms-word";
 HttpContext.Current.Response.AddHeader("Content-Disposition", "inline;filename=ContentDocument.doc");

 StringBuilder htmlCode = new StringBuilder();
 htmlCode.Append("<html>");
 htmlCode.Append("<head>"+strBody+" <style type=\"text/css\">body {font-family:arial;font-size:14.5;}</style></head>");
 htmlCode.Append("<body>");

 ... populate htmlCode ...

 htmlCode.Append("</body></html>");
 HttpContext.Current.Response.Write(htmlCode.ToString());
 HttpContext.Current.Response.End();
 HttpContext.Current.Response.Flush();

I have not tried it myself but dont see the reason why it should not work

If you are already writing your html then show it as Word document, why not use css for page orientation like this :

@media screen and (orientation:landscape) {
    body { opacity: 0; }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top