xmlgraphics-batik-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andy Norman <anor...@simulsoft.com>
Subject Re: how does one set a viewport with Batik via code
Date Fri, 03 Apr 2009 16:17:18 GMT
Hi, Helder,

Thanks for your reply.  I agree re: general SVG questions should be 
addressed in other forums (and thanks for the reference).  My query was 
too open-ended. 

My Batik-specific question is really:  how to create a viewport entity 
definition in the internal DOM via code, so that upon SVGGenerator 
stream(out) the document contains

<!ENTITY Viewport1 "<rect x='.5' y='.5' width='49' height='29'
fill='none' stroke='blue'/>">
<!ENTITY Viewport2 "<rect x='.5' y='.5' width='29' height='59'
fill='none' stroke='blue'/>">

I ask this because it's the only way I know how to verify that the 
internal DOM matches the W3C example.

>> I've been trying to implement the W3C example
>> http://nelson.w3.org/TR/2000/CR-SVG-20001102/coords.html#ExamplePreserveAspectRatio
> I'd suggest taking a look at the version 1.1 of the SVG specification
> [1] (the section you mention is also there [2]). It's generally the
> one implementations best support [3]. If you decide to stick with
> version 1.0, I'd suggest using the official version of the
> specification [4].
Yes, it definitely helps to look at the original and correct version!  
Fortunately, no material difference in this particular case...
>> on a JSVGCanvas using Batik 1.6, but haven't been able to figure out how to
>> create named viewport entities as the example above shows.  Can anyone tell
>> me how to achieve this via Batik Java code?
> Do you mean using the SVG Generator [1]? As far as I know, I guess
> that the generator doesn't create this sort of entities (but I'm not
> familiar with it, so I might be wrong). If you really intend this, I'd
> suggest using a general XML parser/generator.
My SVG content is initially created 100% by Batik internally, via user 
commands communicated to an interactive JSVGCanvas wrapped in a desktop 
GUI.  No ECMAScript.  The SVG is streamed out as mentioned prior.  I 
just need the canvas to show the same results if the user reloads the 
file later from disk.
>> My ultimate goal is to scale a symbol instanced with a <use> element...maybe
>> I am going about this incorrectly?
> I'd say that you could use a transform attribute [5] directly in the
> use element instead. Something like:
>   <use transform="scale(2)" xlink:href="#ElementId" />
> This will likely be better supported among implementations than the
> attempt of using "preserveAspectRatio", which assume child SVG
> element(s).
Setting the scale on the <use> means additional transform manipulations 
to keep the x,y location correct.  I interpret the viewport specs to 
mean I can place the viewport without using transforms - letting the 
viewport take care of scaling within itself, and I'm always in favor of 
letting someone else do the work for me ;-). 

The only implementation I was concerned with was Batik's, but if users 
can't exchange the generated SVG with other programs then indeed I might 
be wise to work out the transforms instead.
> Hope this helps,
>   Helder Magalhães
It does.  Thanks much for you input!  I'll take a closer look at the 
transform manipulations.  But I am still looking to find out how to 
create those viewport entities, and reference them, via Batik.



To unsubscribe, e-mail: batik-users-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: batik-users-help@xmlgraphics.apache.org

View raw message