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]

Reply via email to