So, I present a partial view in memory in order to direct the XSL-FO data to the view in PDF rendering.
The PDF renderer can accept a string, XmlDocument, or Stream as input.
Here is what I would like to do: ( Edited for clarity )
The solution is taken from: http://thriftybliss.spaces.live.com/blog/cns!58DA805F37F31F20!170.entry?wa=wsignin1.0&sa=362921628
var viewPage = new ViewPage();
var viewData = new ViewDataDictionary(model);
viewPage.ViewData = viewData;
var control = viewPage.LoadControl(viewName);
viewPage.Controls.Add(control);
using (var inStream = new MemoryStream())
{
using (var sw = new StreamWriter(inStream))
{
using (var tw = new HtmlTextWriter(sw))
{
viewPage.RenderControl(tw);
}
using (var outStream = new MemoryStream())
{
driver.Render(inStream, outStream);
return outStream.ToArray();
}
}
}
Here's what works, but what I don't want to do:
var sb = new StringBuilder();
using (var sw = new StringWriter(sb))
{
using (var tw = new HtmlTextWriter(sw))
{
vp.RenderControl(tw);
}
}
var xml = new XmlDocument();
xml.LoadXml(sb.ToString());
using (var ms = new MemoryStream())
{
driver.Render(xml, ms);
return ms.ToArray();
}
Unfortunately, HtmlTextWriter doesn't seem to want to write to StreamWriter, or maybe I just messed up something.
StreamWriter StringWriter, , StringWriter, , .ToString(), escape-, XSL-FO, " " ".
, XmlDocument , -. HtmlTextWriter Renderer. ?
!