蜡染 - 如何找到"填充" TextNode的颜色?

时间:2014-10-27 12:34:24

标签: java svg batik

我正在尝试使用Batik来执行SVG转换,除了我似乎无法找出原始SVG文档的fill属性的值存储在Batik上之外,它还没有问题。 TextNode元素。所以在我的SVG中我有以下内容:

<text x="276.1875" y="120.390625" text-anchor="middle" font="10px &quot;Arial&quot;"
      stroke="none" fill="#ffffff" style="-webkit-tap-highlight-color: rgb(0, 0, 0); text-anchor: middle; font-style: normal; font-variant: normal; font-weight: normal; font-stretch: normal; font-size: 10px; line-height: normal; font-family: Arial;"
      font-size="10px" font-family="Arial">
     <tspan dy="3.5" >Proportion </tspan>
</text>

这很好用,但当我使用自定义TextPainter(通过通用桥接器)尝试处理TextNode时,我发现以下内容:

   public void paint(TextNode node, Graphics2D g2d )
   {
      AttributedCharacterIterator aci = node.getAttributedCharacterIterator();
      Paint colourInfo = (Paint)aci.getAttribute(TextAttribute.FOREGROUND); //null
      Paint bgInfo = (Paint)aci.getAttribute(TextAttribute.BACKGROUND); //null
      // do actual painting
   }

事实上,我可以通过TextAttribute和GVT自定义文本属性查找的与颜色相关的大多数属性都返回null。 aci对象确实有一个非空属性列表,但我无法弄清楚调试器中的键是什么,因为它们都是关键属性列表。

paint对象的现有Graphics2D属性通常设置为刚刚绘制的块的颜色,这意味着如果我不更改内容,我只会显示所有文本与背景颜色相同,使其难以阅读。

如何找到原始SVG中提供的这些文本节点的颜色?

1 个答案:

答案 0 :(得分:0)

我们发现TextNode分为TextRun个,TextRun内你可以PAINT_INFO访问AttributedCharacterIterator的{​​{1}}属性,如下所示:

AttributedCharacterIterator runaci = textRun.getACI();
char c = runaci.first();
TextPaintInfo tpi = (TextPaintInfo) runaci.getAttribute(PAINT_INFO);
if ( tpi == null || !tpi.visible )
   {
      return y;
    }
g2d.setPaint(tpi.fillPaint);

TextPaintInfo包含原始SVG中与显示文本有关的数据。