vvvv/SVG无法呈现文本。

3

我正在尝试在我的C#项目中使用vvvv/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;

如果我尝试添加例如圆形节点,它会正常渲染。文本不会渲染,直到我将svg存储为字符串,使用SvgDocument.FromSvg()解析后再渲染位图。虽然这样可以工作,但对于较大的SVG和微小的更改速度太慢。有没有什么办法可以使文本立即可渲染,而无需重新解析?

2个回答

3
尝试添加以下内容:
SvgContentNode newContent = new SvgContentNode();
newContent.Content = "Text";
txt.Nodes.Add(newContent);

非常好!你碰巧知道我类似问题的答案吗:http://stackoverflow.com/questions/34839802/alter-gradient-in-svg-using-svg-net - l33t

1
我偶然遇到了相同的问题,花了一些时间才弄清楚。似乎需要在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>,在我看来似乎是正确的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接