在下载字文档的C#中的时间标头图像没有被显示(Header image is not being d

2019-10-30 09:17发布

我已经产生对飞一个HTML文件,后来它下载与扩展名为.doc word文件。 问题是,在我的机器上(本地主机)的标志图像被成功地显示,但是当我上传我的代码在服务器上,然后图像不显示 。 我没有找到图片src服务器上我也没有安装在服务器上的MS-办公室,但我的机器上我已经安装了微软Office的任何问题。 下面是我的代码生成的Word文件。 请检查一下,让我知道,如果你能解决我的问题。 提前致谢。

     public void DownloadWordFormat(string id)
    {
        ViewModel model = FetchContent(id);
        string fileName = Guid.NewGuid().ToString() + ".html";
        string path = MyConfiguration.Instance.DirectoryToDownloadFile + fileName;
        string savePath = Request.MapPath(path);
        string logoPath = Request.MapPath(GetLogo());
        StringBuilder sb = GenerateHTMLForWordDocument(model, logoPath);                

        // Create the file.
        using (FileStream fs = System.IO.File.Create(savePath, 1024))
        {
            Byte[] info = new UTF8Encoding(true).GetBytes(sb.ToString());
            // Add some information to the file.
            fs.Write(info, 0, info.Length);
        }
        Response.Clear();
        Response.ClearContent();
        Response.ClearHeaders();
        Response.Buffer =true;
        Response.WriteFile(savePath);
        Response.ContentType="application/msword";
        string file = model.SessionId + ".doc";
        Response.AddHeader("Content-Disposition", "attachment; filename=" + file);
        Response.Flush();
        Response.End();
        // Delete the file if it exists.
        if (System.IO.File.Exists(savePath))
        {
            System.IO.File.Delete(savePath);
        }


    }

     private static StringBuilder GenerateHTMLForWordDocument(ViewModel model,string logo)
    {
        StringBuilder sb = new StringBuilder();
        sb.Append("<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'> ");
        sb.Append("<head>");
        sb.Append("<title></title>");
        sb.Append("<!--[if gte mso 9]><xml> <w:WordDocument>  <w:View>Print</w:View>  <w:Zoom>90</w:Zoom></w:WordDocument></xml><![endif]-->");
        sb.Append("<style>");
        sb.Append("p.MsoFooter, li.MsoFooter, div.MsoFooter");
        sb.Append("{");
        sb.Append("margin:0in;margin-bottom:.0001pt;mso-pagination:widow-orphan;tab-stops:center 3.0in right 6.0in;font-size:12.0pt;");
        sb.Append("}");
        sb.Append("<style>");
        sb.Append("<!-- /* Style Definitions */");
        sb.Append("@page Section1");
        sb.Append("{");
        sb.Append("size:8.5in 11.0in; margin:1.0in 1.0in 1.0in 1.0in;mso-header-margin:.5in;mso-footer-margin:.5in;mso-title-page:yes; mso-header: h1;mso-footer: f1;mso-first-header: fh1;mso-first-footer: ff1;mso-paper-source:0;");
        sb.Append("}");
        sb.Append("div.Section1");
        sb.Append("{");
        sb.Append("page:Section1;");
        sb.Append("}");
        sb.Append("table#hrdftrtbl");
        sb.Append("{");
        sb.Append("margin:0in 0in 0in 900in;width:1px;height:1px;overflow:hidden;");
        sb.Append("}");
        sb.Append("-->");
        sb.Append("</style></head>");
        sb.Append("<body lang=EN-US style='tab-interval:.5in'>");
        sb.Append("<div class=Section1>");
        sb.Append(model.Content);
        sb.Append("<table id='hrdftrtbl' border='0' cellspacing='0' cellpadding='0'>");
        sb.Append("<tr><td>");
        sb.Append("<div style='mso-element:header' id=h1 >");
        sb.Append("<div class=MsoHeader >");
        sb.Append("<table width='100%'>");

        sb.Append("<tr><td><img src='" + logo + "' alt='logo' /></td><td style='vertical-align:top'><span>" + model.Session + "&nbsp;(" + model.SessionId + ")</span></td></tr>");
        sb.Append("<tr><td colspan='2'><hr /><br /></td></tr>");
        sb.Append("</table>");
        sb.Append("</div>");
        sb.Append("</div>");
        sb.Append("");

        sb.Append("</td><td>");
        sb.Append("<div style='mso-element:footer' id=f1>");
        sb.Append("<p class=MsoFooter>");
        sb.Append(" <span style=mso-tab-count:2'></span>");
        sb.Append("<table width='100%'>");
        sb.Append("<tr><td colspan='2'><hr /></td></tr>");
        sb.Append("<tr><td align='left'>Page <span style='mso-field-code: PAGE '><span style='mso-no-proof:yes'></span></span> of <span style='mso-field-code: NUMPAGES '></span></td>");
        sb.Append("<td align='right'>Downloaded on: <span> " + DateTime.Now.ToString("dd MMM yyyy h:MM tt") + "</span></td></tr>");
        sb.Append("</table></p></div>");
        sb.Append("<div style='mso-element:header' id=fh1 >");
        sb.Append("<div class=MsoHeader >");
        sb.Append("<table width='100%'>");
        sb.Append("<tr><td><img src='" + logo + "' alt='logo' /></td><td style='vertical-align:top'><span>" + model.Session + "&nbsp;(" + model.SessionId + ")</span></td></tr>");
        sb.Append("<tr><td colspan='2'><hr /><br /></td></tr>");
        sb.Append("</table>");
        sb.Append("</div></div>");
        sb.Append("<div style='mso-element:footer' id=ff1>");
        sb.Append("<p class=MsoFooter><span lang=EN-US style='mso-ansi-language:EN-US'>");
        sb.Append(" <table width='100%'>");
        sb.Append("<tr><td colspan='2'><hr /></td></tr>");

        sb.Append("<tr><td align='left'>Page <span style='mso-field-code: PAGE '><span style='mso-no-proof:yes'></span></span> of <span style='mso-field-code: NUMPAGES '></span></td>");
        sb.Append("<td align='right'>Downloaded on: <span>" + DateTime.Now.ToString("dd MMM yyyy h:MM tt") + "</span></td></tr>");
        sb.Append("</table>");
        sb.Append("<o:p></o:p></span></p>");
        sb.Append("</div>");
        sb.Append("</td></tr>");
        sb.Append("</table>");
        sb.Append("</body></html>");
        return sb;
    }

       private static string GetLogo()
    {
        string logo = Links.Areas.MAL.Content.Images.LOGO_png;
        logo = logo.Substring(0, logo.LastIndexOf("?"));
        return logo;
    }

Answer 1:

确保它的预渲染,我的代码是在asp.net C#(不MVC),但如果它可以帮助你可以试试:

 public override void VerifyRenderingInServerForm(Control control)
    {
        /* Verifies that the control is rendered */

    }

问候



Answer 2:

我得到这个问题的解决方案。 其实这个问题是我捡的标志图像的方式。 在我上面的代码来获取图像路径线路是这样的:

Request.MapPath(GetLogo());

这里的问题是,Request.MapPath()映射到物理路径指定的虚拟路径。 因此,在当正在客户端计算机上下载的Word文档时,它正在寻找的路径为“C上的头标志:\ XYZ \开发\ VNext \ Scs.root \ SCS \ WWW \区\ OnlineShoping \内容\图片\ LOGO巴纽”而且由于标识图像在服务器不存在的客户机上的这条道路,这就是为什么它没有被Word文档中添加在下载的 。 当我给了绝对路径这样我的问题得到有效解决:

string path="http://abc.com/Areas/Content/Images/LOGO.png"

所以上面的代码成功生成字文档与具有HTML数据作为输入.doc扩展名。 另外这个代码并不需要微软Office或MS-字安装在服务器上



文章来源: Header image is not being displaying at the time of downloading word document in c#