Re: FOP with embeded SVG doesn't render at correct size in Cocoon
Joerg, Here's an example xml that produces the problems (svg:use url failure for FOP versions of fop/batik jars and scaling problem for Cocoon versions of fop/batik jars): if you call it bar.xml: http://www.w3.org/2000/svg"; xmlns:xlink="http://www.w3.org/1999/xlink"; xmlns:fo="http://www.w3.org/1999/XSL/Format";> http://www.w3.org/1999/xlink"; width="6in" height="6in" viewBox="0 0 1400 1400"> sitemap: Thanks, Steve On 03.03.2004 22:20, J.Pietschmann wrote: Joerg Heinicke wrote: It's the 0.20.5 release, but built with our Batik 1.5. I guess the FOP people must clarify if this made any sense or not. IIRC we had the released Fop jar in our CVS and got complaints for problems with Batik after Batik update. So we rebuilt Fop with this new Batik and the problems seemed to be gone. Odd. If it compiles, it shouldn't complain about missing methods at run time. There may be behaviour changes though, has someone checked the Batik change log? I guess no, at least I didn't it. But our CVS contains a sample with an image and this works for me after my recent commit for the image path that was wrong: http://127.0.0.1:/samples/fop/misc/minimal.pdf. Probably it happens only for embedded SVG? I searched for some more messages on this issue, but they always end at the same place: http://archives.real-time.com/pipermail/cocoon-devel/2003-September/thread.html#19117 http://koala.ilog.fr/batik/mlists/batik-dev/archives/threads.html#03368 Batik has changed an interface and broke the dependency of FOP on it. The Cocoon dev thread ended with the question of downgrading. But as you said: "If it compiles, it shouldn't complain about missing methods at run time." Joerg _ Learn how to help protect your privacy and prevent fraud online at Tech Hacks & Scams. http://special.msn.com/msnbc/techsafety.armx
Re: FOP with embeded SVG doesn't render at correct size in Cocoon
Joerg, Sorry for the delay in replying... On 28.02.2004 19:18, Steve Schwarz wrote: Thanks for the info. I tried replacing the Cocoon jars: batik-all-1.5.jar fop-0.20.5.jar with the FOP 0.20.5 jars (fop.jar batik.jar) in that case no SVG is rendered at all because there is a problem with use and url(#), even though the reference is resolved within the same element (and resolves correctly when using FOP standalone...must be relying on different behavior than the Cocoon URI resolving provides?). That's strange as no Cocoon URI resolving does not take part here. Sylvain tried to replace the resolver with the Cocoon one for usage of Cocoon pseudo protocols, but this broke the local URIs (#), so it was reverted. It lived from Feb, 4th, to Feb 8th - I hope your Cocoon is not from that time. Cocoon 2.1.4 does not contains this. I am using Cocoon 2.1.2 with the Cocoon 2.1.4 batik/fop jars (looks like they didn't change since 2.1.2 anyway). If I just try to use the FOP version of Batik (Cocoon fop-0.20.5.jar) I What does it mean? No Batik at all? Cocoon's fop JAR as standalone? Sorry for the confusion. I meant (fop-0.20.5.jar and batik.jar). That is, the Batik from the FOP release and the Cocoon FOP jar. get a No Such Method in Batik. java.lang.NoSuchMethodError: org.apache.batik.bridge.UnitProcessor.createContext(Lorg/apache/batik/bridge/BridgeContext;Lorg/w3c/dom/Element;)Lorg/apache/batik/parser/UnitProcessor$Context; So it looks like Cocoon's version of FOP is using a different (newer?) version of Batik. But that raises the question, was the Cocoon version of FOP taken from CVS and is really post 0.20.5 release? It's the 0.20.5 release, but built with our Batik 1.5. I guess the FOP people must clarify if this made any sense or not. IIRC we had the released Fop jar in our CVS and got complaints for problems with Batik after Batik update. So we rebuilt Fop with this new Batik and the problems seemed to be gone. The FOP 0.20.5 release uses Batik 1.5 beta 4. I also tried with the maintenance branch CVS head of FOP with no difference. Hmm, head *or* branch :) I guess you mean the recent stuff from the branch. Yep. latest from the FOP maintenance branch. I think I'll look into writing a Serializer that invokes the standalone FOP as though it was an external program so I can pickup the versions of FOP/Batik I need to make this work. Not a very integrative solution ... I agree it's really nasty...but I can seem to make these play together otherwise. From: "J.Pietschmann" Can anyone tell me how the Cocoon fop and batik jar files are generated and how that is different from the jars supplied with FOP? THere were some Cocoon releases which shipped with a different Batik jar than the corresponding FOP release, partly due to interface changes in Batik which forced FOP to use a CVS snapshot. I don't know of the current state, but the latest Batik was released after the latest FOP release, if Cocoon grabbed the latest Batik jar, there are certainly some differences. After Batik 1.5 b 2 we had b5 and the 1.5 release in use. The latter two are newer then FOP 0.20.5 and its Batik 1.5 b4. I would like to see this solved for Cocoon finally. For Steve it should work to use Fop 0.20.5's jar and its batik.jar (the 1.5 b4) and to replace the Cocoon's versions of these two jars. I spent a lot of time trying to work around the bug, but to no avail. It looks like for these specfic SVG input files the PDF document processing will always be "write once" on file upload so I can use an action to generate them via exec'ing an external FOP and they will never change for the document life. Then I can serve them up through . Thanks again for your help. Steve _ Fast. Reliable. Get MSN 9 Dial-up - 3 months for the price of 1! (Limited-time Offer) http://click.atdmt.com/AVE/go/onm00200361ave/direct/01/
Re: FOP with embeded SVG doesn't render at correct size in Cocoon
Thanks for the info. I tried replacing the Cocoon jars: batik-all-1.5.jar fop-0.20.5.jar with the FOP 0.20.5 jars (fop.jar batik.jar) in that case no SVG is rendered at all because there is a problem with use and url(#), even though the reference is resolved within the same element (and resolves correctly when using FOP standalone...must be relying on different behavior than the Cocoon URI resolving provides?). If I just try to use the FOP version of Batik (Cocoon fop-0.20.5.jar) I get a No Such Method in Batik. java.lang.NoSuchMethodError: org.apache.batik.bridge.UnitProcessor.createContext(Lorg/apache/batik/bridge/BridgeContext;Lorg/w3c/dom/Element;)Lorg/apache/batik/parser/UnitProcessor$Context; So it looks like Cocoon's version of FOP is using a different (newer?) version of Batik. But that raises the question, was the Cocoon version of FOP taken from CVS and is really post 0.20.5 release? I also tried with the maintenance branch CVS head of FOP with no difference. I think I'll look into writing a Serializer that invokes the standalone FOP as though it was an external program so I can pickup the versions of FOP/Batik I need to make this work. Thanks for your help, Steve From: "J.Pietschmann" Torsten Curdt wrote: Can anyone tell me how the Cocoon fop and batik jar files are generated and how that is different from the jars supplied with FOP? THere were some Cocoon releases which shipped with a different Batik jar than the corresponding FOP release, partly due to interface changes in Batik which forced FOP to use a CVS snapshot. I don't know of the current state, but the latest Batik was released after the latest FOP release, if Cocoon grabbed the latest Batik jar, there are certainly some differences. _ Get fast, reliable access with MSN 9 Dial-up. Click here for Special Offer! http://click.atdmt.com/AVE/go/onm00200361ave/direct/01/
Re: FOP with embeded SVG doesn't render at correct size in Cocoon
Hi I've got a weird problem generating pdfs using FOP from xml containing SVG; but only when processed through Cocoon (2.1.2). Generation directly with FOP is problem free. Same FOP version? Do you imply other Cocoon versions are working? Nope, I'm implying FOP standalone with the same FOP version as Cocoon uses works correctly :^) It looks like when invoked through Cocoon FOP is still reserving the right amount of space (based on the svg with/height attributes) but then when Batik is invoked it is rendering the image at the incorrect scale(my guess?). I tried dropping in the fop and batik jar files from Cocoon 2.1.4 and Cocoon still doesn't render the embedded SVG at large viewBox values correctly. Can anyone tell me how the Cocoon fop and batik jar files are generated and how that is different from the jars supplied with FOP? Thanks for the reply! Steve _ Get fast, reliable access with MSN 9 Dial-up. Click here for Special Offer! http://click.atdmt.com/AVE/go/onm00200361ave/direct/01/
FOP with embeded SVG doesn't render at correct size in Cocoon
Hi I posted this to the users mail list with no success; I'm hoping someone can here can point me in the right direction...? In the archives I've seen some dev discussions of which Batik to use when rendering embeded SVG in FO and which to use when rendering SVG to PNG/JPEG (but I need to do both...) I've got a weird problem generating pdfs using FOP from xml containing SVG; but only when processed through Cocoon (2.1.2). Generation directly with FOP is problem free. For viewBox values larger than "0 0 525 525" (you know this is going to be weird already...) the generated image within the PDF is proportionally smaller than specified in the svg element's width/height attributes. For example this renders as a black square filled in red and is 7 in on each side: http://www.w3.org/1999/xlink"; height="7in" width="7in" viewBox="0 0 500, 500"> But this renders as a black edged square filled in red and is ~6 in on each side: http://www.w3.org/1999/xlink"; height="7in" width="7in" viewBox="0 0 600, 600"> Of course the data I'm rendering is in a scale requiring viewBox sizes well over 1000 in width/height. Has anyone got a pointer for me? I took a look at FOPSerializer and it doesn't really do anything suspicious... Thanks Steve _ Click, drag and drop. My MSN is the simple way to design your homepage. http://click.atdmt.com/AVE/go/onm00200364ave/direct/01/
Re: SQLTransformer mod to optionally preserve case of column names
Hi again, Sorry for the thrash, I had a paste error in the diff I posted - here is the correct one Regards Steve diff -u SQLTransformer.java.old SQLTransformer.java --- SQLTransformer.java.old 2003-08-08 10:59:05.0 -0500 +++ SQLTransformer.java 2003-08-08 11:35:02.0 -0500 @@ -108,6 +108,8 @@ public static final String MAGIC_VALUE = "value"; public static final String MAGIC_DOC_ELEMENT = "doc-element"; public static final String MAGIC_ROW_ELEMENT = "row-element"; +/** Should ResultSet rows have db column names lowercased (default) */ +public static final String MAGIC_PRESERVE_COLUMN_CASE = "preserve-column-case"; public static final String MAGIC_IN_PARAMETER = "in-parameter"; public static final String MAGIC_IN_PARAMETER_NR_ATTRIBUTE = "nr"; public static final String MAGIC_IN_PARAMETER_VALUE_ATTRIBUTE = "value"; @@ -281,7 +283,8 @@ getLogger().debug( "ROW-ELEMENT: " + parameters.getParameter( SQLTransformer.MAGIC_ROW_ELEMENT, "row" ) ); getLogger().debug( "NS-URI: " + parameters.getParameter( SQLTransformer.MAGIC_NS_URI_ELEMENT, NAMESPACE ) ); getLogger().debug( "NS-PREFIX: " + parameters.getParameter( SQLTransformer.MAGIC_NS_PREFIX_ELEMENT, "" ) ); - getLogger().debug( "CLOB_ENCODING: " + clobEncoding ); + getLogger().debug( "CLOB_ENCODING: " + clobEncoding ); +getLogger().debug( "PRESERVE_COLUMN_CASE: " + parameters.getParameter( SQLTransformer.MAGIC_PRESERVE_COLUMN_CASE, "" ) ); } } @@ -872,6 +875,9 @@ /** Mapping out parameters - objectModel **/ protected HashMap outParametersNames = null; + /** Check if we should not lowercase column names in results */ + protected boolean preserveColumnCase = false; + protected Query( SQLTransformer transformer, int query_index ) { this.transformer = transformer; this.query_index = query_index; @@ -1032,6 +1038,7 @@ protected void execute() throws SQLException { this.rowset_name = properties.getParameter( SQLTransformer.MAGIC_DOC_ELEMENT, "rowset" ); this.row_name = properties.getParameter( SQLTransformer.MAGIC_ROW_ELEMENT, "row" ); + this.preserveColumnCase = properties.getParameterAsBoolean( SQLTransformer.MAGIC_PRESERVE_COLUMN_CASE, false ); Enumeration enum = query_parts.elements(); StringBuffer sb = new StringBuffer(); @@ -1241,9 +1248,12 @@ AttributesImpl attr = new AttributesImpl(); if ( !isupdate && !isstoredprocedure ) { for ( int i = 1; i <= md.getColumnCount(); i++ ) { -transformer.start( md.getColumnName( i ).toLowerCase(), attr ); + String columnName = md.getColumnName( i ); + if (this.preserveColumnCase != true) + columnName = columnName.toLowerCase(); +transformer.start( columnName, attr ); this.serializeData(manager, getColumnValue( i ) ); -transformer.end( md.getColumnName( i ).toLowerCase() ); +transformer.end( columnName ); } } else if ( isupdate && !isstoredprocedure ) { transformer.start( "returncode", attr ); @@ -1280,13 +1290,16 @@ while ( rs.next() ) { transformer.start( this.row_name, attr ); for ( int i = 1; i <= md.getColumnCount(); i++ ) { -transformer.start( md.getColumnName( i ).toLowerCase(), attr ); + String columnName = md.getColumnName( i ); + if (this.preserveColumnCase != true) + columnName = columnName.toLowerCase(); +transformer.start( columnName, attr ); if ( md.getColumnType( i ) == 8 ) { //prevent nasty exponent notation this.serializeData(manager, SQLTransformer.getStringValue( rs.getBigDecimal( i ) )); } else { this.serializeData(manager, SQLTransformer.getStringValue( rs.getObject( i ) )); } -transformer.end( md.getColumnName( i ).toLowerCase() ); +transformer.end(columnName); } transformer.end( this.row_name ); } _ Help STOP SPAM with the new MSN 8 and get 2 months FREE* http://join.msn.com/?page=features/junkmail
SQLTransformer mod to optionally preserve case of column names
Hi I'm new to Cocoon and found a need to preserve the case of database column names when using the SQLTransformer. I found some older mail archive discussions about this enhancement but no code changes were posted. I just merged my change into the latest 2.1 source (I have changes in 2.04 in case anyone is interested). With this modification the current behavior (lowercasing column names) is preserved by default. Here are the diffs for your consideration. Any comments/criticism are greatly appreciated. Best Regards, Steve diff -u SQLTransformer.java.old SQLTransformer.java --- SQLTransformer.java.old 2003-08-08 10:59:05.0 -0500 +++ SQLTransformer.java 2003-08-08 11:17:33.0 -0500 @@ -108,6 +108,8 @@ public static final String MAGIC_VALUE = "value"; public static final String MAGIC_DOC_ELEMENT = "doc-element"; public static final String MAGIC_ROW_ELEMENT = "row-element"; +/** Should ResultSet rows have db column names lowercased (default) */ +public static final String MAGIC_PRESERVE_COLUMN_CASE = "preserve-column-case"; public static final String MAGIC_IN_PARAMETER = "in-parameter"; public static final String MAGIC_IN_PARAMETER_NR_ATTRIBUTE = "nr"; public static final String MAGIC_IN_PARAMETER_VALUE_ATTRIBUTE = "value"; @@ -281,7 +283,8 @@ getLogger().debug( "ROW-ELEMENT: " + parameters.getParameter( SQLTransformer.MAGIC_ROW_ELEMENT, "row" ) ); getLogger().debug( "NS-URI: " + parameters.getParameter( SQLTransformer.MAGIC_NS_URI_ELEMENT, NAMESPACE ) ); getLogger().debug( "NS-PREFIX: " + parameters.getParameter( SQLTransformer.MAGIC_NS_PREFIX_ELEMENT, "" ) ); - getLogger().debug( "CLOB_ENCODING: " + clobEncoding ); + getLogger().debug( "CLOB_ENCODING: " + clobEncoding ); +getLogger().debug( "PRESERVE_COLUMN_CASE: " + parameters.getParameter( SQLTransformer.MAGIC_PRESERVE_COLUMN_CASE, "" ) ); } } @@ -872,6 +875,9 @@ /** Mapping out parameters - objectModel **/ protected HashMap outParametersNames = null; + /** Check if we should not lowercase column names in results */ + protected boolean preserveColumnCase = false; + protected Query( SQLTransformer transformer, int query_index ) { this.transformer = transformer; this.query_index = query_index; @@ -1032,6 +1038,7 @@ protected void execute() throws SQLException { this.rowset_name = properties.getParameter( SQLTransformer.MAGIC_DOC_ELEMENT, "rowset" ); this.row_name = properties.getParameter( SQLTransformer.MAGIC_ROW_ELEMENT, "row" ); + this.preserveColumnCase = properties.getParameterAsBoolean( SQLTransformer.MAGIC_PRESERVE_COLUMN_CASE, false ); Enumeration enum = query_parts.elements(); StringBuffer sb = new StringBuffer(); @@ -1241,9 +1248,12 @@ AttributesImpl attr = new AttributesImpl(); if ( !isupdate && !isstoredprocedure ) { for ( int i = 1; i <= md.getColumnCount(); i++ ) { -transformer.start( md.getColumnName( i ).toLowerCase(), attr ); + String columnName = md.getColumnName( i ); + if (this.preserveColumnCase != true) + columnName = columnName.toLowerCase(); +transformer.start( columnName, attr ); this.serializeData(manager, getColumnValue( i ) ); -transformer.end( md.getColumnName( i ).toLowerCase() ); +transformer.end( columnName ); } } else if ( isupdate && !isstoredprocedure ) { transformer.start( "returncode", attr ); @@ -1280,7 +1290,10 @@ while ( rs.next() ) { transformer.start( this.row_name, attr ); for ( int i = 1; i <= md.getColumnCount(); i++ ) { -transformer.start( md.getColumnName( i ).toLowerCase(), attr ); + String columnName = md.getColumnName( i ); + if (this.preserveColumnCase != true) + columnName = columnName.toLowerCase(); +transformer.start( columnName, attr ); if ( md.getColumnType( i ) == 8 ) { //prevent nasty exponent notation this.serializeData(manager, SQLTransformer.getStringValue( rs.getBigDecimal( i ) )); } else { _ MSN 8 with e-mail virus protection service: 2 months FREE* http://join.msn.com/?page=features/virus