SVG Саламандра изображение

Я пытался обработать и растеризовать файл svg с помощью SVG Salamander и Java в течение последних нескольких дней и просто не могу заставить его работать.

Вот мой файл SVG, сгенерированный Adobe Illustrator. В основном он содержит случайный текст, причем один из tspan настроен так, чтобы отображать желтый текст.

<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
     width="595.28px" height="841.89px" viewBox="0 0 595.28 841.89" enable-background="new 0 0 595.28 841.89" xml:space="preserve">
<text transform="matrix(1 0 0 1 117 180)"><tspan x="0" y="0" font-family="'MyriadPro-Regular'" font-size="12">asdfasdfasdfasdfasdfasdfasdf</tspan><tspan x="0" y="14.4" font-family="'MyriadPro-Regular'" font-size="12">asdfiausldöfjaöljfdölajsdf</tspan><tspan x="0" y="28.8" font-family="'MyriadPro-Regular'" font-size="12">adsfal+sdfajksdflkasdf</tspan><tspan x="0" y="57.6" fill="#FFDE17" font-family="'MyriadPro-Regular'" font-size="12">asdlfköajsdöfjkaölsdfj</tspan></text>
</svg>

В моей программе я стремлюсь изменить некоторые цвета текста tspan, а затем растеризовать svg как .png. Первый метод просматривает дерево документов SVG и добавляет уникальные идентификаторы ко всем тегам. Второй метод случайным образом выбирает набор этих идентификаторов, выбирает соответствующий tspan и устанавливает атрибут заполнения (до сих пор все, кажется, работает нормально, некоторая отладка показала мне, что я получаю правильный tspan и правильно установлен атрибут заполнения), а затем растрирует svg. Вот где начинается проблема: полученные .png не отображают измененные цвета шрифта (цвета текста просто черные, даже tspan, окрашенный в желтый цвет в примере xml, каким-то образом «изменен» на черный. Некоторые тесты показали мне , он даже не показывает измененное текстовое содержимое tspan.Вот код, который выполняет работу по установке атрибутов и рендерингу:

...
SVGElement element = tempDiagram.getElement(String.valueOf(curId));
if (!element.hasAttribute("fill", AnimationElement.AT_CSS)) {
   element.addAttribute("fill", AnimationElement.AT_CSS, "#ff0000");
} else {
   element.setAttribute("fill", AnimationElement.AT_CSS, "#ff0000");
}
   tempDiagram.updateTime(0f);
   BufferedImage bi = new BufferedImage(2480,3508,BufferedImage.TYPE_INT_ARGB);
   Graphics2D ig2 = bi.createGraphics();
   ig2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
   ig2.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
   tempDiagram.render(ig2);
   ImageIO.write(bi, "png", new File("test" + String.valueOf(i) + ".png"));
...

Вы видите что-нибудь, что могло бы объяснить мою проблему до сих пор? Любая помощь приветствуется!

P.s. Если я помещу красный прямоугольник в SVG с помощью Illustrator, прямоугольник также будет красным в полученном .png. Так что проблема почему-то, похоже, затрагивает только tspans или теги, которые я «касаюсь» в своей программе...


person user1774249    schedule 25.10.2012    source источник
comment
Согласно сайту примеров SVG Salamander: svgsalamander.java.net/docs/use.html Библиотека Salamander поддерживает только настройку текстового содержимого tspan и никаких дальнейших изменений тега tspan... теперь я перешел на батик, который отлично работает!   -  person user1774249    schedule 25.10.2012
comment
Отвечает ли это на ваш вопрос? Пример SVG Salamander?   -  person Dave Jarvis    schedule 17.07.2020