문제

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?

도움이 되었습니까?

해결책

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>")

다른 팁

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; }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top