vvv/SVG未呈现文本

本文关键字:文本 SVG vvv | 更新日期: 2024-10-22 00:43:04

我正在尝试使用vvv/SVG库(https://github.com/vvvv/SVG,当前版本)。我设法画了一些简单的画,但在渲染文本时出现了奇怪的行为。

以下代码将文本元素添加到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;

如果我尝试添加e.circle节点,它可以渲染。在我将svg存储到字符串之前,文本不会渲染,然后用SvgDocument.FromSvg()解析它并渲染位图。这是可行的,但是对于较大的SVG和较小的更改来说太慢了。我能做些什么让文本立即呈现,而不需要重新处理吗?

vvv/SVG未呈现文本

尝试添加以下内容:

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

我偶然发现了同样的问题,花了一些时间才弄清楚。似乎SvgText需要子项才能包含在生成的.svg文件的XML中。

对我来说,将文本包含为嵌套的内容节点就成功了:

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

我不确定这是否是添加文本的最佳方式,但它在生成的.svg文件中创建了XML标记<text x="10" y="10">my text</text>,这对我来说似乎是正确的。