Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Batik SVG rendering: The attribute "width" of the element <rect> is required #1459

Closed
krasa opened this issue Jun 15, 2023 · 2 comments
Closed
Assignees
Labels
bug Something isn't working

Comments

@krasa
Copy link

krasa commented Jun 15, 2023

Both Batik and echosvg fail to render a diagram:

@startuml
note as some_note_with_state_diagram_inside
{{
 [*] --> someState : aa
}}
end note
@enduml

->

<?xml version="1.0" encoding="us-ascii" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" height="190px" preserveAspectRatio="none" style="width:155px;height:190px;background:#FFFFFF;" version="1.1"
     viewBox="0 0 155 190" width="155px" zoomAndPan="magnify">
    <defs/>
    <g>
        <g id="elem_some_note_with_state_diagram_inside">
            <path d="M7,7 L7,176 L141,176 L141,17 L131,7 L7,7 " fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/>
            <path d="M131,7 L131,17 L141,17 L131,7 " fill="#FEFFDD" style="stroke:#181818;stroke-width:1.0;"/>
            <image height="159" width="113" x="13"
                   xlink:href="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1OSIgd2lkdGg9IjExMyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgPjxkZWZzLz48Zz48cmVjdCBmaWxsPSIjRkZGRkZGIiBzdHlsZT0id2lkdGg6MTEzcHg7aGVpZ2h0OjE1OXB4O2JhY2tncm91bmQ6I0ZGRkZGRjsiIC8+IDxlbGxpcHNlIGN4PSI1Ni41IiBjeT0iMTYiIGZpbGw9IiMxODE4MTgiIHJ4PSIxMCIgcnk9IjEwIiBzdHlsZT0ic3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjEuMDsiLz48ZyBpZD0ic29tZVN0YXRlIj48cmVjdCBmaWxsPSIjRjFGMUYxIiBoZWlnaHQ9IjUwIiByeD0iMTIuNSIgcnk9IjEyLjUiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MC41OyIgd2lkdGg9Ijk5IiB4PSI3IiB5PSIxMDMiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjAuNTsiIHgxPSI3IiB4Mj0iMTA2IiB5MT0iMTI5LjI5NjkiIHkyPSIxMjkuMjk2OSIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmciIHRleHRMZW5ndGg9Ijc5IiB4PSIxNyIgeT0iMTIwLjk5NTEiPnNvbWVTdGF0ZTwvdGV4dD48L2c+PCEtLWxpbmsgKnN0YXJ0KiB0byBzb21lU3RhdGUtLT48ZyBpZD0ibGlua18qc3RhcnQqX3NvbWVTdGF0ZSI+PHBhdGggZD0iTTU2LjUsMjYuMDAyIEM1Ni41LDQxLjQ1OCA1Ni41LDczLjY4NDggNTYuNSw5Ny42MDAxICIgZmlsbD0ibm9uZSIgaWQ9IipzdGFydCotdG8tc29tZVN0YXRlIiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjEuMDsiLz48cG9seWdvbiBmaWxsPSIjMTgxODE4IiBwb2ludHM9IjU2LjUsMTAyLjg3MjgsNjAuNSw5My44NzI4LDU2LjUsOTcuODcyOCw1Mi41LDkzLjg3MjgsNTYuNSwxMDIuODcyOCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDoxLjA7Ii8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGxlbmd0aEFkanVzdD0ic3BhY2luZyIgdGV4dExlbmd0aD0iMTYiIHg9IjU3LjUiIHk9IjY5LjA2NjkiPmFhPC90ZXh0PjwvZz48IS0tU1JDPVtLdVpNWWJOR3JSTEpBQ3hGSkdxa0lJbjlMUjFJSTRtNDAwMDBdLS0+PC9nPjwvc3ZnPg=="
                   y="12"/>
        </g><!--SRC=[oyilILL8B5OepizDZSy3SkBBCqiouejB4e7CbCp4zAB4tFZClEBCb5IkwcekXMYjM0LTNJkm-c2G8WKhXSH4hjfQhjIy50MG0G00]-->
    </g>
</svg>

Because of :

The attribute "width" of the element <rect> is required
	at io.sf.carte.echosvg.bridge.SVGRectElementBridge.buildShape(SVGRectElementBridge.java:116)
	at io.sf.carte.echosvg.bridge.SVGShapeElementBridge.createGraphicsNode(SVGShapeElementBridge.java:64)
	at io.sf.carte.echosvg.bridge.GVTBuilder.buildGraphicsNode(GVTBuilder.java:211)
	at io.sf.carte.echosvg.bridge.GVTBuilder.buildComposite(GVTBuilder.java:171)
	at io.sf.carte.echosvg.bridge.GVTBuilder.buildGraphicsNode(GVTBuilder.java:217)
	at io.sf.carte.echosvg.bridge.GVTBuilder.buildComposite(GVTBuilder.java:171)
	at io.sf.carte.echosvg.bridge.GVTBuilder.build(GVTBuilder.java:143)
	at io.sf.carte.echosvg.bridge.SVGImageElementBridge.createSVGImageNode(SVGImageElementBridge.java:664)
	at io.sf.carte.echosvg.bridge.SVGImageElementBridge.createImageGraphicsNode(SVGImageElementBridge.java:289)
	at io.sf.carte.echosvg.bridge.SVGImageElementBridge.buildImageGraphicsNode(SVGImageElementBridge.java:180)
	at io.sf.carte.echosvg.bridge.SVGImageElementBridge.createGraphicsNode(SVGImageElementBridge.java:126)
	at io.sf.carte.echosvg.bridge.GVTBuilder.buildGraphicsNode(GVTBuilder.java:211)
	at io.sf.carte.echosvg.bridge.GVTBuilder.buildComposite(GVTBuilder.java:171)
	at io.sf.carte.echosvg.bridge.GVTBuilder.buildGraphicsNode(GVTBuilder.java:217)
	at io.sf.carte.echosvg.bridge.GVTBuilder.buildComposite(GVTBuilder.java:171)
	at io.sf.carte.echosvg.bridge.GVTBuilder.buildGraphicsNode(GVTBuilder.java:217)
	at io.sf.carte.echosvg.bridge.GVTBuilder.buildComposite(GVTBuilder.java:171)
	at io.sf.carte.echosvg.bridge.GVTBuilder.build(GVTBuilder.java:84)
The attribute "width" of the element <rect> is required
Caused by: org.apache.batik.bridge.BridgeException: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1OSIgd2lkdGg9IjExMyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgPjxkZWZzLz48Zz48cmVjdCBmaWxsPSIjRkZGRkZGIiBzdHlsZT0id2lkdGg6MTEzcHg7aGVpZ2h0OjE1OXB4O2JhY2tncm91bmQ6I0ZGRkZGRjsiIC8+IDxlbGxpcHNlIGN4PSI1Ni41IiBjeT0iMTYiIGZpbGw9IiMxODE4MTgiIHJ4PSIxMCIgcnk9IjEwIiBzdHlsZT0ic3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjEuMDsiLz48ZyBpZD0ic29tZVN0YXRlIj48cmVjdCBmaWxsPSIjRjFGMUYxIiBoZWlnaHQ9IjUwIiByeD0iMTIuNSIgcnk9IjEyLjUiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MC41OyIgd2lkdGg9Ijk5IiB4PSI3IiB5PSIxMDMiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjAuNTsiIHgxPSI3IiB4Mj0iMTA2IiB5MT0iMTI5LjI5NjkiIHkyPSIxMjkuMjk2OSIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmciIHRleHRMZW5ndGg9Ijc5IiB4PSIxNyIgeT0iMTIwLjk5NTEiPnNvbWVTdGF0ZTwvdGV4dD48L2c+PCEtLWxpbmsgKnN0YXJ0KiB0byBzb21lU3RhdGUtLT48ZyBpZD0ibGlua18qc3RhcnQqX3NvbWVTdGF0ZSI+PHBhdGggZD0iTTU2LjUsMjYuMDAyIEM1Ni41LDQxLjQ1OCA1Ni41LDczLjY4NDggNTYuNSw5Ny42MDAxICIgZmlsbD0ibm9uZSIgaWQ9IipzdGFydCotdG8tc29tZVN0YXRlIiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjEuMDsiLz48cG9seWdvbiBmaWxsPSIjMTgxODE4IiBwb2ludHM9IjU2LjUsMTAyLjg3MjgsNjAuNSw5My44NzI4LDU2LjUsOTcuODcyOCw1Mi41LDkzLjg3MjgsNTYuNSwxMDIuODcyOCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDoxLjA7Ii8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGxlbmd0aEFkanVzdD0ic3BhY2luZyIgdGV4dExlbmd0aD0iMTYiIHg9IjU3LjUiIHk9IjY5LjA2NjkiPmFhPC90ZXh0PjwvZz48IS0tU1JDPVtLdVpNWWJOR3JSTEpBQ3hGSkdxa0lJbjlMUjFJSTRtNDAwMDBdLS0+PC9nPjwvc3ZnPg==:1

	at org.apache.batik.bridge.SVGRectElementBridge.buildShape(SVGRectElementBridge.java:119)
	at org.apache.batik.bridge.SVGShapeElementBridge.createGraphicsNode(SVGShapeElementBridge.java:60)
	at org.apache.batik.bridge.GVTBuilder.buildGraphicsNode(GVTBuilder.java:213)
	at org.apache.batik.bridge.GVTBuilder.buildComposite(GVTBuilder.java:171)
	at org.apache.batik.bridge.GVTBuilder.buildGraphicsNode(GVTBuilder.java:219)
	at org.apache.batik.bridge.GVTBuilder.buildComposite(GVTBuilder.java:171)
	at org.apache.batik.bridge.GVTBuilder.build(GVTBuilder.java:141)
	at org.apache.batik.bridge.SVGImageElementBridge.createSVGImageNode(SVGImageElementBridge.java:698)
	at org.apache.batik.bridge.SVGImageElementBridge.createImageGraphicsNode(SVGImageElementBridge.java:296)
	at org.apache.batik.bridge.SVGImageElementBridge.buildImageGraphicsNode(SVGImageElementBridge.java:179)
	at org.apache.batik.bridge.SVGImageElementBridge.createGraphicsNode(SVGImageElementBridge.java:121)
	at org.apache.batik.bridge.GVTBuilder.buildGraphicsNode(GVTBuilder.java:213)
	at org.apache.batik.bridge.GVTBuilder.buildComposite(GVTBuilder.java:171)
	at org.apache.batik.bridge.GVTBuilder.buildGraphicsNode(GVTBuilder.java:219)
	at org.apache.batik.bridge.GVTBuilder.buildComposite(GVTBuilder.java:171)
	at org.apache.batik.bridge.GVTBuilder.buildGraphicsNode(GVTBuilder.java:219)
	at org.apache.batik.bridge.GVTBuilder.buildComposite(GVTBuilder.java:171)
	at org.apache.batik.bridge.GVTBuilder.build(GVTBuilder.java:82)
	at org.apache.batik.transcoder.SVGAbstractTranscoder.transcode(SVGAbstractTranscoder.java:210)
	... 4 more

The problem is that Base64 section has the width in style attribute and not in width attribute:

<svg height="161" width="101" xmlns="http://www.w3.org/2000/svg">
    <defs/>
    <g>
        <rect fill="#FFFFFF" style="width:101px;height:161px;background:#FFFFFF;"/>
        <ellipse cx="50.5" cy="16" fill="#181818" rx="10" ry="10" style="stroke:none;stroke-width:1.0;"/>
        <g id="someState">
            <rect fill="#F1F1F1" height="50" rx="12.5" ry="12.5" style="stroke:#181818;stroke-width:0.5;" width="87" x="7" y="105"/>
            <line style="stroke:#181818;stroke-width:0.5;" x1="7" x2="94" y1="133.6211" y2="133.6211"/>
            <text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="67" x="17" y="125.1074">someState</text>
        </g><!--link *start* to someState-->
        <g id="link_*start*_someState">
            <path d="M50.5,26.17 C50.5,42.07 50.5,75.4 50.5,99.82 " fill="none" id="*start*-to-someState" style="stroke:#181818;stroke-width:1.0;"/>
            <polygon fill="#181818" points="50.5,104.89,54.5,95.89,50.5,99.89,46.5,95.89,50.5,104.89" style="stroke:#181818;stroke-width:1.0;"/>
            <text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="14" x="51.5" y="71.0283">aa</text>
        </g><!--SRC=[KuZMYbNGrRLJACxFJGqkIIn9LR1II4m40000]-->
    </g>
</svg>
@arnaudroques arnaudroques self-assigned this Jun 19, 2023
@arnaudroques arnaudroques added bug Something isn't working and removed triage labels Jun 19, 2023
arnaudroques added a commit that referenced this issue Jun 21, 2023
@arnaudroques
Copy link
Contributor

This should be fixed in last snapshot.

Can you give a try?

Thanks

@krasa
Copy link
Author

krasa commented Jun 21, 2023

Works fine, thanks!

@krasa krasa closed this as completed Jun 21, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants