Batik - как да намеря цвета на запълване на TextNode?

Опитвам се да използвам Batik за извършване на SVG преобразуване и всичко върви добре, освен че не мога да открия къде се съхранява стойността на атрибута fill за оригиналния SVG документ в елемента 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 (чрез общ Bridge), за да опитам да обработя 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, се връщат нулеви. Обектът aci има списък с ненулеви атрибути, но не мога да разбера какви са ключовете от програмата за отстраняване на грешки, тъй като всички те са изключени от списъците с атрибути.

Съществуващото свойство paint на обекта Graphics2D обикновено е зададено на цвета на блока, който току-що е нарисувал, което означава, че ако не променя нещата, просто получавам целия си текст да се показва със същия цвят като фона, което затруднява Прочети.

Как мога да намеря цвета за тези текстови възли, които са предоставени в оригиналния SVG?


person glenatron    schedule 27.10.2014    source източник


Отговори (1)


Оказа се, че TextNode е разделено на TextRuns и в рамките на TextRun можете да получите достъп до свойството PAINT_INFO на AttributedCharacterIterator по следния начин:

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, отнасящи се до показания текст.

person glenatron    schedule 29.10.2014