【问题标题】:vvvv/SVG not rendering textvvvv/SVG 不呈现文本
【发布时间】:2015-05-07 20:12:46
【问题描述】:

我正在尝试在我的 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 和较小的更改来说太慢了。我可以做些什么来使文本立即呈现,而无需重新解析?

【问题讨论】:

    标签: c# svg vvvv


    【解决方案1】:

    尝试添加这个:

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

    【讨论】:

    【解决方案2】:

    我偶然发现了同样的问题,我花了一些时间才弄清楚。似乎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>,这对我来说似乎是正确的。

    【讨论】:

      猜你喜欢
      • 2021-04-17
      • 2022-11-24
      • 1970-01-01
      • 2015-02-24
      • 1970-01-01
      • 2017-06-09
      • 2018-03-02
      • 2019-09-02
      • 2013-08-23
      相关资源
      最近更新 更多