I have a quite common problem, as I saw in the various user groups but could not find a suitable answer.
What I want to do is generate an ASP.NET page in my website which will have the option of being exported into Microsoft Word .doc format.
The method I have used is this:
Response.Clear(); Response.AddHeader('content-disposition', 'attachment;filename=Test.doc'); Response.Charset = ''; Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.ContentType = 'application/msword'; StringWriter sw = new StringWriter(); HtmlTextWriter htmlWrite = new HtmlTextWriter(sw); Page.RenderControl(htmlWrite); Response.Write(sw.ToString()); Response.End();
However this eventhough it generates a word doc, the images are note embedded in the document, rather they are placed as links. I have looked for a way to do this, but have not found something that actually worked.
I would appreciate any help I can get, since this as ‘last minute’ requirement (talk about typical)
Thanks
Short Answer: You need to provide absolute URLs for the source of the images in your page.
Longer Answer:
Microsoft Word will open an HTML document if you rename it with a *.doc extension. This is what the code that you provided is doing. In this case, the images are not embedded in the document like they would be if you created a document in actual Word format. If your images are using relative URLs then Word will not know where to look for them, hence the need for absolute URLs.
NOTE: This means that anyone viewing the document without an internet connection will not see the images, as they are requested from the server every time the document is opened.
A more elegant solution would be to create the document in the real Word format. A great library for this is Aspose.Words. Using this library you would be able to embed the images directly into the document so that they do not rely on the server.