Nacho wrote:
Hello,

I tried to perform the same action as Chris Cruzdal, that is, to print just the piece of the canvas that can be seen on the screen. I used the Print Transcoder, and I cannot make it work, I always get to print a nice white page.
Is it a problem of my code? It is like follows (base on the Image Transcoder Tutorial)


// I get the ViewBox transform
AffineTransform aft = svgCanvas.getViewBoxTransform();

Hi Nacho, Chris,


   So upon closer examination the problem is that the coordinate
system for the AOI is the coordinate system of the 'width/height'
elements on the outermost SVG (in other words not the viewBox).
So I think you need to replace 'getViewBoxTransform()' above with
getRenderingTransform().



// Now I extract the measures of the canvas I am using Rectangle canvasRect = svgCanvas.getBounds();

try{
AffineTransform invt = aft.createInverse();
Rectangle iRect = invt.createTransformedShape(canvasRect).getBounds();


PrintTranscoder pt = new PrintTranscoder();
// Set transcoding hints //...
pt.addTranscodingHint(PrintTranscoder.KEY_WIDTH, new Float(iRect.getWidth()));
pt.addTranscodingHint(PrintTranscoder.KEY_HEIGHT, new Float(iRect.getHeight()));
pt.addTranscodingHint(PrintTranscoder.KEY_AOI, iRect);


pt.transcode(new TranscoderInput(svgCanvas.getSVGDocument()),null);


// Print try { pt.print(); } catch (PrinterException ex) {} } catch (NoninvertibleTransformException e) {}

The rectangle I get has the right values, it measures exactly the piece of the canvas I am using at that moment, but somehow it doesn't work, maybe my transcoding hints are not right.

Any help would be very welcome.

Thanks,

Ignacio


Hi,


    You can probably get this by transforming the
JSVGCanva's bbox (0,0) -> (comp.w, comp.h) to the
viewBox coordinate system.  This can be done by
using canvas.getViewBoxTransform().


This works (kind of) when I print the JSVGComponent
using a method that gets the Graphics2d behind the
JSVGComponent and then directly uses the Java Printing
API without any interference of the Batik transcoder,
but has the big drawback that --- I guess because of
not using the transcoder --- the quality of the
printout is not very satisfying: it works for normal
A4 pages (about 30 cm high and 20 cm wide), but for A0
pages (about 120 cm high and 90 cm wide) the
resolution is just not enough.


Just to make sure, there is no way to just pass an
affine transformation to the PrintTranscoder which
then automagically applies this affine transformation?




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to