Diverse problems with text alignment when rendering to EMF
Description
When rendering the attached sample file to EMF (source: https://en.m.wikipedia.org/wiki/File:SVG_Test_TextAlign.svg), the result is not as expected in a number of ways. The expected result would be:
The actual result however is:
The code used to produce the EMF is stripped down to the max and uses all default values:
string emfTempPath = @"c:\temp\EMF_Test_TextAlign.emf";
var svg = SvgDocument.Open(@"c:\temp\SVG_Test_TextAlign.svg");
using (Graphics bufferGraphics = Graphics.FromHwndInternal(IntPtr.Zero))
{
using (var metafile = new Metafile(emfTempPath, bufferGraphics.GetHdc()))
{
using (Graphics graphics = Graphics.FromImage(metafile))
{
svg.Draw(graphics);
}
}
}
Example data
Input SVG: text-align.svg
Result file as EMF: EMF_Test_TextAlign.zip
Used Versions
Reproduced with NuGet version 3.4.6
I figure it may be hard to mimic the behavior in perfect EMFs. However there could be a fallback to rasterized rendering if unrenderable parts are encountered. Unfortunately, even the rasterized output (I tried BMP) has a number of issues for the test file.
Probably it's "just" a number of missing features, the most important ones for this test file being:
- missing support for
alignment-baseline - missing support for
writing-mode - missing support for
font-variant
In particular, the font-variant support in GDI/GDI+ is limited.
No easy way out, except parsing the font files to improve support or using a different rendering system.