//
// This code is part of Document Solutions for Imaging demos.
// Copyright (c) MESCIUS inc. All rights reserved.
//
using System;
using System.IO;
using System.Drawing;
using GrapeCity.Documents.Drawing;
using GrapeCity.Documents.Imaging;
using GrapeCity.Documents.Text;
using GrapeCity.Documents.Html;
namespace DsImagingWeb.Demos
{
// This sample shows how to render a web page specified by a URL
// to an image (here we render the Google home page) using DsHtml.
//
// DsHtml natively supports JPEG, PNG and WebP image formats.
// For these formats, we directly use the GcHtmlRenderer class
// to render the page to a temporary image file, which is then
// copied to the output stream.
//
// Other image formats (BMP, GIF, TIFF) require rendering HTML
// to a temporary GcBitmap, and saving that to the target format.
//
// Please see notes in comments at the top of HelloWorldHtml
// sample code for details on adding DsHtml to your projects.
public class RenderPage0
{
public Stream GenerateImageStream(string targetMime, Size pixelSize, float dpi, bool opaque, string[] sampleParams = null)
{
// The Uri of the web page to render:
var uri = new Uri("http://www.google.com");
// Depending on the target format, we may need a temp file:
string tfile = null;
// The stream to contain the return image:
var ms = new MemoryStream();
// Create an instance of GcHtmlBrowser that is used to render HTML:
using var browser = Common.Util.NewHtmlBrowser();
// Create an HtmlPage instance rendering the source Uri:
using var htmlPage = browser.NewPage(uri, new PageOptions() { WindowSize = pixelSize });
// JPEG, PNG and WebP are natively supported by DsHtml. Other image formats can be
// supported by rendering to a GcBitmap and saving it to the target format:
switch (targetMime)
{
case Common.Util.MimeTypes.JPEG:
tfile = Path.GetTempFileName();
htmlPage.SaveAsJpeg(tfile, new JpegOptions());
break;
case Common.Util.MimeTypes.PNG:
tfile = Path.GetTempFileName();
htmlPage.SaveAsPng(tfile, new PngOptions());
break;
case Common.Util.MimeTypes.WEBP:
tfile = Path.GetTempFileName();
htmlPage.SaveAsWebp(tfile, new WebpOptions());
break;
default:
using (var bmp = new GcBitmap(pixelSize.Width, pixelSize.Height, true, dpi, dpi))
{
htmlPage.Render(bmp, new PngOptions());
switch (targetMime)
{
case Common.Util.MimeTypes.BMP:
bmp.SaveAsBmp(ms);
break;
case Common.Util.MimeTypes.GIF:
bmp.SaveAsGif(ms);
break;
case Common.Util.MimeTypes.TIFF:
bmp.SaveAsTiff(ms);
break;
case Common.Util.MimeTypes.ICO:
bmp.SaveAsIco(ms, null, IcoFrameEncoding.Png);
break;
default:
throw new Exception("Unexpected.");
}
}
break;
}
// If a temp file was used, copy the created image from the temp file and clean up:
if (!string.IsNullOrEmpty(tfile))
{
using (var ts = File.OpenRead(tfile))
ts.CopyTo(ms);
File.Delete(tfile);
}
// Done.
ms.Seek(0, SeekOrigin.Begin);
return ms;
}
}
}