Re: Dynamically insert SVG graphics in the XML passed to FOP

Matthias Reischenbacher <[email protected]>
Newsgroups gmane.text.xml.fop.user
Message-ID <[email protected]>
Hi,

you should try to write out the SVG Elements with the following method
(instead of using a string):

handler.startElement(String namespaceURI, String localName,
                        String qName, Attributes atts)

handler.endElement(String namespaceURI, String localName,
                        String qName)

e.g.

handler.startElement("http://www.w3.org/2000/svg", "svg", "svg:svg", atts)

handler.startElement("http://www.w3.org/2000/svg", "svg", "svg:g", atts)

handler.endElement("http://www.w3.org/2000/svg", "svg", "svg:svg")

handler.endElement("http://www.w3.org/2000/svg", "svg", "svg:g")

etc.

Best regards,
Matthias

On 21.06.2017 13:53, Pierre Caron wrote:
> Hello,
>
> I have a rather trivial problem that I haven't found a solution yet.
>
> I want to insert dynamically generated SVG code Inside the XML data
> which is supplied to FOP.
>
> To make things simpler, suppose you start from the ExampleObj2PDF
> found in FOP Embedding page
> (https://xmlgraphics.apache.org/fop/2.2/embedding.html#ExampleObj2PDF)
> and that you add a method in the ProjectTeam entity that generates a
> SVG String :
>
>
> public String getDynamicSVG()  {
>      return " <svg:svg width=\"20\" height=\"20\">\n" + ... +
> "</svg:svg>";
> }
>
> (http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop/examples/embedding/java/embedding/model/ProjectTeam.java?view=markup)
>
>
> And that this method would be called by the following line inside
> ProjectTeamXMLReader class
>
> handler.element("SVGdynamique",projectMember.getDynamicSVG());
> (http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop/examples/embedding/java/embedding/model/ProjectTeamXMLReader.java?view=markup)
>
> The question is : how to prevent the SVG tags from being escaped into
> &lt; and &gt;?  Below is the XML code I'm getting :
>
> ...
> <svgDynamique> &lt;svg:svg width="20" height="20"&gt;
>   &lt;svg:g style="fill:red; stroke:#000000"&gt;
>      &lt;svg:rect x="0" y="0" width="15" height="15"/&gt;
>      &lt;svg:rect x="5" y="5" width="15" height="15"/&gt;
>   &lt;/svg:g&gt;
> &lt;/svg:svg&gt;</svgDynamique>
> ...
>
> In the final step, the SVG string would be merged by the
> projectteam2fo.xsl like this :
>
>                 <fo:block space-before.optimum="15pt">
> <fo:instream-foreign-object>
>                         <svg xmlns="http://www.w3.org/2000/svg"
> width="20" height="20">
>                             <xsl:copy-of select="svgDynamique" />
>                         </svg>
>                     </fo:instream-foreign-object>]
>                 </fo:block>
>
> Is there a way to prevent the escaping?
>
> Note that the SVG tags get escaped during the XML processing by SAX
> not during the insertion into the xsl file.
>
> Any help would be greatly appreciated!
>
> Pierre Caron
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.