klease 02/02/23 08:48:59 Modified: src/org/apache/fop/render AbstractRenderer.java src/org/apache/fop/render/pdf PDFRenderer.java Log: Take CTM into account for PDF rendering (small test) Revision Changes Path 1.11 +12 -3 xml-fop/src/org/apache/fop/render/AbstractRenderer.java Index: AbstractRenderer.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/render/AbstractRenderer.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- AbstractRenderer.java 8 Jan 2002 09:52:17 -0000 1.10 +++ AbstractRenderer.java 23 Feb 2002 16:48:59 -0000 1.11 @@ -1,5 +1,5 @@ /* - * $Id: AbstractRenderer.java,v 1.10 2002/01/08 09:52:17 keiron Exp $ + * $Id: AbstractRenderer.java,v 1.11 2002/02/23 16:48:59 klease Exp $ * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. * For details on use and redistribution please refer to the * LICENSE file included with these sources. @@ -134,18 +134,27 @@ protected void renderRegionViewport(RegionViewport port) { if (port != null) { Rectangle2D view = port.getViewArea(); - currentBPPosition = (int) (view.getY() / 1000); - currentIPPosition = (int) (view.getX() / 1000); + // The CTM will transform coordinates relative to + // this region-reference area into page coords, so + // set origin for the region to 0,0. + currentBPPosition = 0; // (int) (view.getY() / 1000); + currentIPPosition = 0; // (int) (view.getX() / 1000); currentBlockIPPosition = currentIPPosition; RegionReference region = port.getRegion(); + startVParea(region.getCTM()); if (region.getRegionClass() == Region.BODY) { renderBodyRegion((BodyRegion) region); } else { renderRegion(region); } + endVParea(); } } + + protected void startVParea(CTM ctm) { } + + protected void endVParea() { } protected void renderRegion(RegionReference region) { List blocks = region.getBlocks(); 1.97 +36 -5 xml-fop/src/org/apache/fop/render/pdf/PDFRenderer.java Index: PDFRenderer.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/render/pdf/PDFRenderer.java,v retrieving revision 1.96 retrieving revision 1.97 diff -u -r1.96 -r1.97 --- PDFRenderer.java 11 Feb 2002 09:45:39 -0000 1.96 +++ PDFRenderer.java 23 Feb 2002 16:48:59 -0000 1.97 @@ -1,5 +1,5 @@ /* - * $Id: PDFRenderer.java,v 1.96 2002/02/11 09:45:39 keiron Exp $ + * $Id: PDFRenderer.java,v 1.97 2002/02/23 16:48:59 klease Exp $ * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. * For details on use and redistribution please refer to the * LICENSE file included with these sources. @@ -204,18 +204,48 @@ pageReferences.put(page, currentPage.referencePDF()); } currentStream = this.pdfDoc.makeStream(); - currentStream.add("BT\n"); + // Transform origin at top left to origin at bottom left + currentStream.add("1 0 0 -1 0 " + + (int) Math.round(pageHeight / 1000) + " cm\n"); + //currentStream.add("BT\n"); Page p = page.getPage(); renderPageAreas(p); - currentStream.add("ET\n"); + //currentStream.add("ET\n"); currentPage.setContents(currentStream); this.pdfDoc.addPage(currentPage); this.pdfDoc.output(ostream); } + + protected void startVParea(CTM ctm) { + // Set the given CTM in the graphics state + currentStream.add("q\n"); + // multiply with current CTM + currentStream.add(ctm.toPDFctm() + " cm\n"); + // Set clip? + } + + protected void endVParea() { + currentStream.add("Q\n"); + } + + protected void renderRegion(RegionReference region) { + // Draw a rectangle so we can see it! + // x=0,y=0,w=ipd,h=bpd + currentStream.add("BT\n"); + super.renderRegion(region); + currentStream.add("ET\n"); + } + + + protected void renderLineArea(LineArea line) { + super.renderLineArea(line); + closeText(); + } + public void renderCharacter(Character ch) { super.renderCharacter(ch); @@ -248,7 +278,8 @@ updateColor(true, pdf); int rx = currentBlockIPPosition; - int bl = pageHeight - currentBPPosition; + // int bl = pageHeight - currentBPPosition; + int bl = currentBPPosition; // Set letterSpacing //float ls = fs.getLetterSpacing() / this.currentFontSize; @@ -257,7 +288,7 @@ if (!textOpen || bl != prevWordY) { closeText(); - pdf.append("1 0 0 1 " + (rx / 1000f) + " " + (bl / 1000f) + pdf.append("1 0 0 -1 " + (rx / 1000f) + " " + (bl / 1000f) + " Tm [" + startText); prevWordY = bl; textOpen = true;
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]