dompdf / php-svg-lib

SVG file parsing / rendering library
GNU Lesser General Public License v3.0
1.39k stars 77 forks source link

Unable to access references defined after an element #115

Open bsweeney opened 5 months ago

bsweeney commented 5 months ago

SvgLib operates as a stream processor, rendering elements as they are encountered. This means that a reference element (e.g., defs) and styling must occur in the document prior to any other elements. Otherwise, the reference element or styling will not yet be available.

For example, the following SVG document:

<svg width="600" height="600" xmlns="http://www.w3.org/2000/svg">
    <rect width="400" height="400" x="100" y="100" />
    <style>
        rect { stroke: blue; stroke-width: 20px; fill: orange; }
    </style>
</svg>

should produce the following output:

image

but SvgLib renders the following:

image

Switching the order of elements in the SVG produces the correct output:

<svg width="600" height="600" xmlns="http://www.w3.org/2000/svg">
    <style>
        rect { stroke: blue; stroke-width: 20px; fill: orange; }
    </style>
    <rect width="400" height="400" x="100" y="100" />
</svg>