Advertisement
andruhovski

Task #1068: Using custom ImageDevice

Oct 15th, 2017
212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.77 KB | None | 0 0
  1. using System;
  2. using Aspose.Html.Dom;
  3. using Aspose.Html.IO;
  4. using Aspose.Html.Rendering.Image;
  5. using Aspose.Html.Drawing;
  6. using Aspose.Html;
  7. using Aspose.Html.Rendering;
  8. using System.Diagnostics;
  9. using System.IO;
  10.  
  11. namespace Task1068
  12. {
  13.     class Program
  14.     {
  15.         private static HTMLDocument _document=new HTMLDocument();
  16.         static void Main()
  17.         {
  18.             GenerateSampleHtml5Document();
  19.             RenderSimpleExample(@"C:\Aspose\files\filter_h1.jpg");
  20.         }
  21.  
  22.         private static void RenderSimpleExample(string outputImgFile)
  23.         {
  24.             var imgOptions = new ImageRenderingOptions
  25.             {
  26.                 Format = ImageFormat.Jpeg,
  27.                 PageSetup =
  28.                 {
  29.                     AnyPage = new Page(new Aspose.Html.Drawing.Size(Unit.FromPixels(1366),Unit.FromPixels(768)))
  30.                 }
  31.             };
  32.  
  33.         var imgDevice = new MyImageDevice(imgOptions, outputImgFile);
  34.         var renderer = new HtmlRenderer();
  35.  
  36.         Console.WriteLine("Render JPG file started...");
  37.             renderer.Render(imgDevice, _document);
  38.             Console.WriteLine("Render JPG file finished.");
  39.         }
  40.  
  41.     private static void GenerateSampleHtml5Document()
  42.         {
  43.             _document.InsertBefore(_document.CreateDocumentType("html", "", "", ""), _document.DocumentElement);
  44.             _document.DocumentElement.SetAttribute("lang", "en");
  45.             _document.Title = "Page for IMG rendering demo";
  46.  
  47.             var head = _document.GetElementsByTagName("head")[0];
  48.             var metaCharSet = (HTMLMetaElement)_document.CreateElement("meta");
  49.             metaCharSet.SetAttribute("charset", "UTF-8");
  50.  
  51.             var metaViewPort = (HTMLMetaElement)_document.CreateElement("meta");
  52.             metaViewPort.Name = "viewport";
  53.             metaViewPort.Content = "width=device-width, initial-scale=1";
  54.  
  55.             var linkElement1 = (HTMLLinkElement)_document.CreateElement("link");
  56.             linkElement1.Href = "http://cdn.myunv.com/css/uecore.css";
  57.             linkElement1.Rel = "stylesheet";
  58.  
  59.             var linkElement2 = (HTMLLinkElement)_document.CreateElement("link");
  60.             //linkElement2.Href = "https://fonts.googleapis.com/css?family=Germania+One";
  61.             linkElement2.Href = "https://fonts.googleapis.com/css?family=Merriweather|Roboto+Slab";
  62.             linkElement2.Rel = "stylesheet";
  63.  
  64.             var style = (HTMLStyleElement)_document.CreateElement("style");
  65.             //style.TextContent = "h1 {color: red;} h2 {color:green} table { border: 1px dashed black}" +
  66.             //    "h2 {page-break-after: always; } p {font-family: 'Germania One', cursive;}" + "@page { size: 7in 9.25in; margin: 27mm 16mm 27mm 16mm; }";
  67.             style.TextContent = "h1 {color: red; font-family: 'Roboto Slab', serif;}" +
  68.                                 "h2 {color:green} " +
  69.                                 "table { border: 1px dashed black}" +
  70.                                 "p {font-family: 'Merriweather', serif;}";
  71.             //"p {font-family: 'Germania One', cursive;}";
  72.  
  73.             head.AppendChild(metaCharSet);
  74.             head.AppendChild(metaViewPort);
  75.             head.AppendChild(linkElement1);
  76.             head.AppendChild(linkElement2);
  77.             head.AppendChild(style);
  78.  
  79.             var header1 = (HTMLHeadingElement)_document.CreateElement("h1");
  80.             header1.TextContent = "Heading 1";
  81.             var header2 = (HTMLHeadingElement)_document.CreateElement("h2");
  82.             header2.TextContent = "Heading 2";
  83.  
  84.             _document.DocumentElement.LastElementChild.AppendChild(header1);
  85.             _document.DocumentElement.LastElementChild.AppendChild(header2);
  86.  
  87.             var colors = new[] { "red", "orange", "black", "green", "blue", "indigo", "violet" };
  88.             var alignment = new[] { "left", "right", "center" };
  89.             for (var i = 0; i < 2; i++)
  90.             {
  91.                 var paragraph = (HTMLParagraphElement)_document.CreateElement("p");
  92.                 paragraph.Id = $"par{i}";
  93.                 //paragraph.Style.SetProperty("font-weight", i % 2 == 0 ? "700" : "400", "");
  94.                 paragraph.Style.SetProperty("color", colors[i % 7], "");
  95.                 //paragraph.Style.SetProperty("text-align", alignment[i % 3], "");
  96.                 paragraph.TextContent = LoremNET.Lorem.Paragraph(50, 25);
  97.                 _document.DocumentElement.LastElementChild.AppendChild(paragraph);
  98.             }
  99.  
  100.             HTMLImageElement img = (HTMLImageElement)_document.CreateElement("img");
  101.             img.Src = "http://lorempixel.com/400/200/sports/1";
  102.             img.Alt = "Placeholder 400x200";
  103.             img.Title = "Placeholder image";
  104.             _document.DocumentElement.LastElementChild.AppendChild(img);
  105.             //Adding an ordered list
  106.             HTMLOListElement orderedListElement = (HTMLOListElement)_document.CreateElement("ol");
  107.             for (var i = 0; i < 10; i++)
  108.             {
  109.                 HTMLLIElement listItem = (HTMLLIElement)_document.CreateElement("li");
  110.                 listItem.TextContent = $"Item {i + 1}";
  111.                 orderedListElement.AppendChild(listItem);
  112.             }
  113.             _document.DocumentElement.LastElementChild.AppendChild(orderedListElement);
  114.  
  115.             // Adding simple table 4x3
  116.             var table = (HTMLTableElement)_document.CreateElement("table");
  117.             var tBody = (HTMLTableSectionElement)_document.CreateElement("tbody");
  118.             for (var i = 0; i < 4; i++)
  119.             {
  120.                 var row = (HTMLTableRowElement)_document.CreateElement("tr");
  121.                 row.Id = "trow_" + i;
  122.                 for (var j = 0; j < 3; j++)
  123.                 {
  124.                     var cell = (HTMLTableCellElement)_document.CreateElement("td");
  125.                     cell.Id = $"cell{i}_{j}";
  126.                     cell.TextContent = "Cell " + j;
  127.                     row.AppendChild(cell);
  128.                 }
  129.                 tBody.AppendChild(row);
  130.             }
  131.             table.AppendChild(tBody);
  132.             _document.DocumentElement.LastElementChild.AppendChild(table);
  133.  
  134.         }
  135.     }
  136.  
  137.     internal class MyImageDevice : ImageDevice
  138.     {
  139.         public override bool BeginElement(Element element, System.Drawing.RectangleF rect)
  140.         {
  141.             Trace.WriteLine(element.TagName+" "+rect.ToString());
  142.             return !element.TagName.Equals("H2") && base.BeginElement(element, rect);
  143.         }
  144.  
  145.         public MyImageDevice(ImageRenderingOptions options, ICreateStreamProvider streamProvider) : base(options, streamProvider) { }
  146.  
  147.         public MyImageDevice(ImageRenderingOptions options, string file) : base(options, file) { }
  148.  
  149.         public MyImageDevice(ImageRenderingOptions options, Stream stream) : base(options, stream) { }
  150.     }
  151. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement