svg-net / SVG

Fork of the ms svg library
http://svg-net.github.io/SVG/
Microsoft Public License
1.17k stars 474 forks source link

Diverse problems with text alignment when rendering to EMF #1138

Open jbartlau opened 9 months ago

jbartlau commented 9 months ago

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:

image

The actual result however is:

image

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

jbartlau commented 9 months ago

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.

jbartlau commented 9 months ago

Probably it's "just" a number of missing features, the most important ones for this test file being:

paulushub commented 9 months ago

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.