Index: src/java/org/apache/fop/render/pdf/PDFRenderer.java
===================================================================
--- src/java/org/apache/fop/render/pdf/PDFRenderer.java	(revision 706620)
+++ src/java/org/apache/fop/render/pdf/PDFRenderer.java	(working copy)
@@ -75,8 +75,12 @@
 import org.apache.fop.datatypes.URISpecification;
 import org.apache.fop.events.ResourceEventProducer;
 import org.apache.fop.fo.Constants;
+import org.apache.fop.fo.expr.PropertyException;
+import org.apache.fop.fo.expr.PropertyParser;
 import org.apache.fop.fo.extensions.ExtensionAttachment;
+import org.apache.fop.fo.extensions.ExtensionElementMapping;
 import org.apache.fop.fo.extensions.xmp.XMPMetadata;
+import org.apache.fop.fo.properties.Property;
 import org.apache.fop.fonts.Font;
 import org.apache.fop.fonts.LazyFont;
 import org.apache.fop.fonts.SingleByteFont;
@@ -117,6 +121,7 @@
 import org.apache.fop.util.CharUtilities;
 import org.apache.fop.util.ColorProfileUtil;
 import org.apache.fop.util.ColorUtil;
+import org.apache.fop.util.QName;
 
 /**
  * Renderer that renders areas to PDF.
@@ -726,6 +731,9 @@
         pages.put(page, currentPage);
     }
 
+    private static final QName FOX_BLEED
+            = new QName(ExtensionElementMapping.URI, "fox:bleed");
+    
     private void setupPage(PageViewport page) {
         this.pdfResources = this.pdfDoc.getResources();
 
@@ -752,8 +760,47 @@
         //TODO If the sequence of generated page numbers were inspected, this could be
         //expressed in a more space-efficient way
         nums.put(page.getPageIndex(), dict);
+        
+        handleFoxBleed(page);
     }
 
+    private void handleFoxBleed(PageViewport page) {
+        String bleed = page.getForeignAttributeValue(FOX_BLEED);
+        if (bleed != null) {
+            Property prop;
+            try {
+                prop = PropertyParser.parse(bleed, null);
+                double bleedWidth = prop.getLength().getValue() / 1000f;
+                //double marksWidth = 10.0;
+                if (bleedWidth != 0) {
+                    Rectangle2D bounds = page.getViewArea();
+                    double w = bounds.getWidth() / 1000f;
+                    double h = bounds.getHeight() / 1000f;
+
+                    Rectangle2D trimRect = new Rectangle2D.Double(0, 0, w, h);
+                    Rectangle2D bleedRect = new Rectangle2D.Double(
+                            -bleedWidth,
+                            -bleedWidth,
+                            w + (2 * bleedWidth),
+                            h + (2 * bleedWidth));
+                    Rectangle2D mediaRect = bleedRect;
+                    /*
+                    Rectangle2D mediaRect = new Rectangle2D.Double(
+                            bleedRect.getMinX() - marksWidth,
+                            bleedRect.getMinY() - marksWidth,
+                            bleedRect.getWidth() + (2 * marksWidth),
+                            bleedRect.getHeight() + (2 * marksWidth));
+                    */
+                    currentPage.setTrimBox(trimRect);
+                    currentPage.setBleedBox(bleedRect);
+                    currentPage.setMediaBox(mediaRect);
+                }
+            } catch (PropertyException e) {
+                log.error("Error while handling fox:bleed", e);
+            }
+        }
+    }
+    
     /**
      * This method creates a pdf stream for the current page
      * uses it as the contents of a new page. The page is written
