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, который мне кажется правильным.