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]