vvvv/SVG не отображает текст

Я пытаюсь использовать библиотеку vvvv/SVG ( https://github.com/vvvv/SVG, текущая версия) в моем проекте на C#. Мне удалось сделать несколько простых рисунков, однако при рендеринге текста закончилось странное поведение.

Следующий код добавляет текстовый элемент в SvgDocument, но текст не отображается в растровом изображении.

        this.SvgDoc = new SvgDocument();
        this.SvgDoc.Width = new SvgUnit(400);
        this.SvgDoc.Height = new SvgUnit(400);

        SvgText txt = new SvgText("TEST");
        txt.X.Add(new SvgUnit(100));
        txt.Y.Add(new SvgUnit(100));
        //txt.FontFamily = "Arial";
        txt.FontSize = new SvgUnit(15);
        txt.Fill = new SvgColourServer(Color.Black);
        this.SvgDoc.Children.Add(txt);

        var bmp2 = this.SvgDoc.Draw();
        this.PBoxRes.Image = bmp2;

Если я попытаюсь добавить, например. круговой узел, он делает хорошо. Текст не будет отображаться до тех пор, пока я не сохраню svg в строку, проанализирую его с помощью SvgDocument.FromSvg() и после этого выведу растровое изображение. Это работает, но слишком медленно с большими SVG и небольшими изменениями. Есть ли что-то, что я могу сделать, чтобы сделать текст визуализируемым немедленно, без повторного анализа?

2 ответа

Решение

Попробуйте добавить это:

SvgContentNode newContent = new SvgContentNode();
newContent.Content = "Text";
txt.Nodes.Add(newContent);

Я наткнулся на ту же проблему, и мне потребовалось некоторое время, чтобы понять это. Кажется, что SvgText нуждается в дочерних элементах для включения в XML-файл результирующего файла.svg.

Для меня включение текста в качестве вложенного узла содержимого сделало свое дело:

new SvgDocument
{
    Width = 100,
    Height = 100,
    FontSize = 10,
    Nodes =
    {
        new SvgText
        {
            Nodes = {new SvgContentNode {Content = "my text"}},
            X = {10},
            Y = {10}
        }
    }
}

Я не уверен, что это лучший способ добавить текст, но он создает тег XML <text x="10" y="10">my text</text> в полученном файле.svg, который мне кажется правильным.

Другие вопросы по тегам