その場で html ドキュメントを生成し、後で .doc 拡張子の word ファイルとしてダウンロードしました。問題は、自分のマシン (localhost) ではロゴ イメージが正常に表示されているのに、コードをサーバーにアップロードするとイメージが表示されないことです。サーバー上のイメージ src に問題は見つかりませんでした。また、サーバーに ms-office がインストールされていませんが、マシンには 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 + " (" + 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 + " (" + 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;
}