生成word文档并使用html设置方向横向

时间:2012-07-09 13:33:57

标签: c# asp.net html export-to-word

我尝试使用以下代码生成word文档:

    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();

它工作正常,但我希望将其设置为横向,并且在“打印版面”中使其显示在Web版面中 有人能帮助我吗?

4 个答案:

答案 0 :(得分:3)

我找到了解决方案in this post。像这样解决:

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

答案 1 :(得分:1)

我解决了这个问题,这对我来说很好。

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

答案 2 :(得分:1)

对于打印版面,请使用此代码....

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();

答案 3 :(得分:0)

我自己没有尝试过,但没有看到它不应该起作用的原因

如果您已经编写了html然后将其显示为Word文档,为什么不将css用于页面方向,如下所示:

@media screen and (orientation:landscape) {
    body { opacity: 0; }
}