Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 08a16b6

Browse files
committed
Merge pull request ArthurHub#35 from jeromerg/master
ENABLED SAVING HTML AS EMF FILE (VECTORIAL IMAGE):
2 parents eaa4e22 + dde63dc commit 08a16b6

File tree

3 files changed

+61
-0
lines changed

3 files changed

+61
-0
lines changed

Source/HtmlRenderer.WinForms/HtmlRender.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,29 @@ public static SizeF RenderGdiPlus(Graphics g, string html, PointF location, Size
273273
}
274274

275275
#if !MONO
276+
277+
public static Metafile RenderToMetafile(string html, float left = 0, float top = 0, float maxWidth = 0, CssData cssData = null,
278+
EventHandler<HtmlStylesheetLoadEventArgs> stylesheetLoad = null, EventHandler<HtmlImageLoadEventArgs> imageLoad = null)
279+
{
280+
Metafile image;
281+
IntPtr dib;
282+
var memoryHdc = Win32Utils.CreateMemoryHdc(IntPtr.Zero, 1, 1, out dib);
283+
try
284+
{
285+
image = new Metafile(memoryHdc, EmfType.EmfPlusDual, "..");
286+
287+
using (var g = Graphics.FromImage(image))
288+
{
289+
Render(g, html, left, top, maxWidth, cssData, stylesheetLoad, imageLoad);
290+
}
291+
}
292+
finally
293+
{
294+
Win32Utils.ReleaseMemoryHdc(memoryHdc, dib);
295+
}
296+
return image;
297+
}
298+
276299
/// <summary>
277300
/// Renders the specified HTML on top of the given image.<br/>
278301
/// <paramref name="image"/> will contain the rendered html in it on top of original content.<br/>

Source/HtmlRenderer.WinForms/HtmlRenderer.WinForms.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@
8787
<Compile Include="HtmlToolTip.cs">
8888
<SubType>Component</SubType>
8989
</Compile>
90+
<Compile Include="MetafileExtensions.cs" />
9091
<Compile Include="Utilities\ClipboardHelper.cs" />
9192
<Compile Include="Utilities\Utils.cs" />
9293
<Compile Include="Utilities\Win32Utils.cs" />
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
using System;
2+
using System.Drawing.Imaging;
3+
using System.IO;
4+
using System.Runtime.InteropServices;
5+
6+
namespace TheArtOfDev.HtmlRenderer.WinForms
7+
{
8+
public static class MetafileExtensions
9+
{
10+
public static void SaveAsEmf(Metafile me, string fileName)
11+
{
12+
/* http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/12a1c749-b320-4ce9-aff7-9de0d7fd30ea
13+
How to save or serialize a Metafile: Solution found
14+
by : SWAT Team member _1
15+
Date : Friday, February 01, 2008 1:38 PM
16+
*/
17+
int enfMetafileHandle = me.GetHenhmetafile().ToInt32();
18+
int bufferSize = GetEnhMetaFileBits(enfMetafileHandle, 0, null); // Get required buffer size.
19+
byte[] buffer = new byte[bufferSize]; // Allocate sufficient buffer
20+
if (GetEnhMetaFileBits(enfMetafileHandle, bufferSize, buffer) <= 0) // Get raw metafile data.
21+
throw new SystemException("Fail");
22+
23+
FileStream ms = File.Open(fileName, FileMode.Create);
24+
ms.Write(buffer, 0, bufferSize);
25+
ms.Close();
26+
ms.Dispose();
27+
if (!DeleteEnhMetaFile(enfMetafileHandle)) //free handle
28+
throw new SystemException("Fail Free");
29+
}
30+
31+
[DllImport("gdi32")]
32+
public static extern int GetEnhMetaFileBits(int hemf, int cbBuffer, byte[] lpbBuffer);
33+
34+
[DllImport("gdi32")]
35+
public static extern bool DeleteEnhMetaFile(int hemfbitHandle);
36+
}
37+
}

0 commit comments

Comments
 (0)