public void GenerateHtmlReport(string filename)
{
var stringWriter = new StringWriter();
// Put HtmlTextWriter in using block because it needs to call Dispose.
using (var writer = new HtmlTextWriter(stringWriter))
{
#region header
writer.BeginDocument("Component Item Report",
@"
body { background-color: #E6E6FA }
h1 { font-family: Arial, Helvetica, sans-serif; }
table { background-color: #FFFFFF; }
table tr td { font-family: Arial, Helvetica, sans-serif; font-size: small; line-height: normal; color: #000000; }
table thead td { background-color: #BABDD6; font-weight: bold; Color: #000000; }
td.right { text-align: right; }");
#endregion
#region Cubes
writer.RenderElement(HtmlTextWriterTag.H1, "Cubes");
writer.BeginTable("1", "3", "0",
new[] { "Icon", "Name", "Type Id", "Sub Type Id", "Cube Size", "Accessible", "Size (W×H×D)", "Mass (Kg)", "Build Time (h:m:s)" });
foreach (var asset in CubeAssets)
{
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.RenderBeginTag(HtmlTextWriterTag.Td);
if (asset.TextureFile != null && File.Exists(asset.TextureFile))
{
writer.AddAttribute(HtmlTextWriterAttribute.Src, "data:image/png;base64," + ImageTextureUtil.GetTextureToBase64(asset.TextureFile, 32, 32));
writer.AddAttribute(HtmlTextWriterAttribute.Width, "32");
writer.AddAttribute(HtmlTextWriterAttribute.Height, "32");
writer.AddAttribute(HtmlTextWriterAttribute.Alt, Path.GetFileNameWithoutExtension(asset.TextureFile));
writer.RenderBeginTag(HtmlTextWriterTag.Img);
writer.RenderEndTag();
}
writer.RenderEndTag(); // Td
writer.RenderElement(HtmlTextWriterTag.Td, asset.FriendlyName);
writer.RenderElement(HtmlTextWriterTag.Td, asset.TypeId);
writer.RenderElement(HtmlTextWriterTag.Td, asset.SubtypeId);
writer.RenderElement(HtmlTextWriterTag.Td, asset.CubeSize);
writer.RenderElement(HtmlTextWriterTag.Td, new EnumToResouceConverter().Convert(asset.Accessible, typeof(string), null, CultureInfo.CurrentUICulture));
writer.RenderElement(HtmlTextWriterTag.Td, "{0}×{1}×{2}", asset.Size.Width, asset.Size.Height, asset.Size.Depth);
writer.AddAttribute(HtmlTextWriterAttribute.Class, "right");
writer.RenderElement(HtmlTextWriterTag.Td, "{0:#,##0.00}", asset.Mass);
writer.AddAttribute(HtmlTextWriterAttribute.Class, "right");
writer.RenderElement(HtmlTextWriterTag.Td, "{0:hh\\:mm\\:ss\\.ff}", asset.Time);
writer.RenderEndTag(); // Tr
}
writer.RenderEndTag(); // Table
#endregion
#region Components
writer.RenderElement(HtmlTextWriterTag.H1, "Components");
writer.BeginTable("1", "3", "0",
new[] { "Icon", "Name", "Type Id", "Sub Type Id", "Accessible", "Mass (Kg)", "Volume (L)", "Build Time (h:m:s)" });
foreach (var asset in ComponentAssets)
{
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.RenderBeginTag(HtmlTextWriterTag.Td);
if (asset.TextureFile != null && File.Exists(asset.TextureFile))
{
writer.AddAttribute(HtmlTextWriterAttribute.Src, "data:image/png;base64," + ImageTextureUtil.GetTextureToBase64(asset.TextureFile, 32, 32));
writer.AddAttribute(HtmlTextWriterAttribute.Width, "32");
writer.AddAttribute(HtmlTextWriterAttribute.Height, "32");
writer.AddAttribute(HtmlTextWriterAttribute.Alt, Path.GetFileNameWithoutExtension(asset.TextureFile));
writer.RenderBeginTag(HtmlTextWriterTag.Img);
writer.RenderEndTag();
}
writer.RenderEndTag(); // Td
writer.RenderElement(HtmlTextWriterTag.Td, asset.FriendlyName);
writer.RenderElement(HtmlTextWriterTag.Td, asset.TypeId);
writer.RenderElement(HtmlTextWriterTag.Td, asset.SubtypeId);
writer.RenderElement(HtmlTextWriterTag.Td, new EnumToResouceConverter().Convert(asset.Accessible, typeof(string), null, CultureInfo.CurrentUICulture));
writer.AddAttribute(HtmlTextWriterAttribute.Class, "right");
writer.RenderElement(HtmlTextWriterTag.Td, "{0:#,##0.00}", asset.Mass);
writer.AddAttribute(HtmlTextWriterAttribute.Class, "right");
writer.RenderElement(HtmlTextWriterTag.Td, "{0:#,##0.00}", asset.Volume);
writer.AddAttribute(HtmlTextWriterAttribute.Class, "right");
writer.RenderElement(HtmlTextWriterTag.Td, "{0:hh\\:mm\\:ss\\.ff}", asset.Time);
writer.RenderEndTag(); // Tr
}
writer.RenderEndTag(); // Table
#endregion
#region Items
writer.RenderElement(HtmlTextWriterTag.H1, "Items");
writer.BeginTable("1", "3", "0",
new[] { "Icon", "Name", "Type Id", "Sub Type Id", "Accessible", "Mass (Kg)", "Volume (L)", "Build Time (h:m:s)" });
foreach (var asset in ItemAssets)
{
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.RenderBeginTag(HtmlTextWriterTag.Td);
if (asset.TextureFile != null && File.Exists(asset.TextureFile))
{
writer.AddAttribute(HtmlTextWriterAttribute.Src, "data:image/png;base64," + ImageTextureUtil.GetTextureToBase64(asset.TextureFile, 32, 32));
writer.AddAttribute(HtmlTextWriterAttribute.Width, "32");
writer.AddAttribute(HtmlTextWriterAttribute.Height, "32");
writer.AddAttribute(HtmlTextWriterAttribute.Alt, Path.GetFileNameWithoutExtension(asset.TextureFile));
writer.RenderBeginTag(HtmlTextWriterTag.Img);
writer.RenderEndTag();
}
writer.RenderEndTag(); // Td
writer.RenderElement(HtmlTextWriterTag.Td, asset.FriendlyName);
writer.RenderElement(HtmlTextWriterTag.Td, asset.TypeId);
writer.RenderElement(HtmlTextWriterTag.Td, asset.SubtypeId);
writer.RenderElement(HtmlTextWriterTag.Td, new EnumToResouceConverter().Convert(asset.Accessible, typeof(string), null, CultureInfo.CurrentUICulture));
writer.AddAttribute(HtmlTextWriterAttribute.Class, "right");
writer.RenderElement(HtmlTextWriterTag.Td, "{0:#,##0.00}", asset.Mass);
writer.AddAttribute(HtmlTextWriterAttribute.Class, "right");
writer.RenderElement(HtmlTextWriterTag.Td, "{0:#,##0.00}", asset.Volume);
writer.AddAttribute(HtmlTextWriterAttribute.Class, "right");
writer.RenderElement(HtmlTextWriterTag.Td, "{0:hh\\:mm\\:ss\\.ff}", asset.Time);
writer.RenderEndTag(); // Tr
}
writer.RenderEndTag(); // Table
#endregion
#region Materials
writer.RenderElement(HtmlTextWriterTag.H1, "Materials");
writer.BeginTable("1", "3", "0",
new[] { "Texture", "Name", "Ore Name", "Rare", "Mined Ore Ratio" });
foreach (var asset in MaterialAssets)
{
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.RenderBeginTag(HtmlTextWriterTag.Td);
if (asset.TextureFile != null && File.Exists(asset.TextureFile))
{
writer.AddAttribute(HtmlTextWriterAttribute.Src, "data:image/png;base64," + ImageTextureUtil.GetTextureToBase64(asset.TextureFile, 32, 32, true));
writer.AddAttribute(HtmlTextWriterAttribute.Width, "32");
writer.AddAttribute(HtmlTextWriterAttribute.Height, "32");
writer.AddAttribute(HtmlTextWriterAttribute.Alt, Path.GetFileNameWithoutExtension(asset.TextureFile));
writer.RenderBeginTag(HtmlTextWriterTag.Img);
writer.RenderEndTag();
}
writer.RenderEndTag(); // Td
writer.RenderElement(HtmlTextWriterTag.Td, asset.Name);
writer.RenderElement(HtmlTextWriterTag.Td, asset.OreName);
writer.RenderElement(HtmlTextWriterTag.Td, new EnumToResouceConverter().Convert(asset.IsRare, typeof(string), null, CultureInfo.CurrentUICulture));
writer.RenderElement(HtmlTextWriterTag.Td, "{0:#,##0.00}", asset.MineOreRatio);
writer.RenderEndTag(); // Tr
}
writer.RenderEndTag(); // Table
#endregion
#region footer
writer.EndDocument();
#endregion
}
// Write to disk.
File.WriteAllText(filename, stringWriter.ToString());
}