]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
now supports size setting properly
authorKeiron Liddle <keiron@apache.org>
Fri, 18 May 2001 10:03:18 +0000 (10:03 +0000)
committerKeiron Liddle <keiron@apache.org>
Fri, 18 May 2001 10:03:18 +0000 (10:03 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@194256 13f79535-47bb-0310-9956-ffa450edef68

src/org/apache/fop/svg/PDFDocumentGraphics2D.java
src/org/apache/fop/svg/PDFGraphics2D.java
src/org/apache/fop/svg/PDFTranscoder.java

index 8f93b10345d0d28b633fba0ebdc1032dd52b8fa8..06bd070096a51e0225cff48e2f39b1fd72ad7ee8 100644 (file)
 package org.apache.fop.svg;
 
 import org.apache.fop.pdf.*;
-import org.apache.fop.layout.*;
 import org.apache.fop.fonts.*;
-import org.apache.fop.render.pdf.*;
-import org.apache.fop.image.*;
-import org.apache.fop.datatypes.ColorSpace;
 
-import org.apache.batik.ext.awt.g2d.*;
-
-import java.text.AttributedCharacterIterator;
-import java.awt.*;
+import java.awt.Graphics;
 import java.awt.Font;
 import java.awt.Image;
-import java.awt.image.*;
-import java.awt.font.*;
-import java.awt.geom.*;
-import java.awt.image.renderable.*;
-import java.io.*;
+import java.awt.Color;
+import java.io.OutputStream;
+import java.io.IOException;
 
-import java.util.Map;
+import org.apache.batik.ext.awt.g2d.GraphicContext;
 
 /**
- * This concrete implementation of <tt>AbstractGraphics2D</tt> is a 
- * simple help to programmers to get started with their own 
- * implementation of <tt>Graphics2D</tt>. 
- * <tt>DefaultGraphics2D</tt> implements all the abstract methods
- * is <tt>AbstractGraphics2D</tt> and makes it easy to start 
- * implementing a <tt>Graphic2D</tt> piece-meal.
+ * This class is a wrapper for the <tt>PDFGraphics2D</tt> that
+ * is used to create a full document around the pdf rendering from
+ * <tt>PDFGraphics2D</tt>.
  *
- * @author <a href="mailto:vincent.hardy@eng.sun.com">Vincent Hardy</a>
+ * @author <a href="mailto:keiron@aftexsw.com">Keiron Liddle</a>
  * @version $Id$
- * @see org.apache.batik.ext.awt.g2d.AbstractGraphics2D
+ * @see org.apache.fop.svg.PDFGraphics2D
  */
 public class PDFDocumentGraphics2D extends PDFGraphics2D {
-       OutputStream stream;
+    OutputStream stream;
 
-       PDFStream pdfStream;
-       int width;
-       int height;
+    PDFStream pdfStream;
+    int width;
+    int height;
 
     /**
-     * Create a new PDFGraphics2D with the given pdf document info.
-     * This is used to create a Graphics object for use inside an already
-     * existing document.
-     * Maybe this could be handled as a subclass (PDFDocumentGraphics2d)
+     * Create a new PDFDocumentGraphics2D.
+     * This is used to create a new pdf document of the given height
+     * and width.
+     * The resulting document is written to the stream after rendering.
+     *
+     * @param textAsShapes set this to true so that text will be rendered
+     * using curves and not the font.
+     * @param stream the stream that the final document should be written to.
+     * @param width the width of the document
+     * @param height the height of the document
      */
-    public PDFDocumentGraphics2D(boolean textAsShapes, OutputStream stream, int width, int height)
-       {
+    public PDFDocumentGraphics2D(boolean textAsShapes,
+                                 OutputStream stream, int width, int height) {
         super(textAsShapes);
         standalone = true;
-               this.stream = stream;
+        this.stream = stream;
         this.pdfDoc = new PDFDocument();
         this.pdfDoc.setProducer("FOP SVG Renderer");
         pdfStream = this.pdfDoc.makeStream();
-               this.width = width;
-               this.height = height;
+        this.width = width;
+        this.height = height;
 
-                               currentFontName = "";
-                               currentFontSize = 0;
-                               currentYPosition = 0;
-                               currentXPosition = 0;
-//                             fontState = fs;
+        currentFontName = "";
+        currentFontSize = 0;
+        currentYPosition = 0;
+        currentXPosition = 0;
+        //                             fontState = fs;
 
         currentStream.write("1 0 0 -1 0 " + height + " cm\n");
 
         // end part
         /*
         FontSetup.addToResources(this.pdfDoc, fontInfo);
-               */
+         */
+
+    }
 
+    /**
+     * Set the dimensions of the svg document that will be drawn.
+     * This is useful if the dimensions of the svg document are different
+     * from the pdf document that is to be created.
+     * The result is scaled so that the svg fits correctly inside the pdf document.
+     */
+    public void setSVGDimension(float w, float h) {
+        PDFNumber pdfNumber = new PDFNumber();
+        currentStream.write("" + pdfNumber.doubleOut(width / w) + " 0 0 " + pdfNumber.doubleOut(height / h) + " 0 0 cm\n");
     }
 
-    public void finish() throws IOException
-       {
+    /**
+     * Set the background of the pdf document.
+     * This is used to set the background for the pdf document
+     * Rather than leaving it as the default white.
+     */
+    public void setBackgroundColor(Color col) {
+        Color c = col;
+        currentColour = new PDFColor(c.getRed(), c.getGreen(), c.getBlue());
+        currentStream.write("q\n");
+        currentStream.write(currentColour.getColorSpaceOut(true));
+
+        currentStream.write("0 0 " + width + " " + height + " re\n");
+
+        currentStream.write("f\n");
+        currentStream.write("Q\n");
+    }
+
+    /**
+     * The rendering process has finished.
+     * This should be called after the rendering has completed as there is
+     * no other indication it is complete.
+     * This will then write the results to the output stream.
+     */
+    public void finish() throws IOException {
         pdfStream.add(getString());
         PDFResources pdfResources = this.pdfDoc.getResources();
-        PDFPage currentPage = this.pdfDoc.makePage(pdfResources, pdfStream,
-                                           width,
-                                          height, null);
+        PDFPage currentPage =
+          this.pdfDoc.makePage(pdfResources, pdfStream, width,
+                               height, null);
         this.pdfDoc.output(stream);
 
-       }
-
-               public String getString() {
-                               return currentStream.toString();
-               }
+    }
 
-    public void setGraphicContext(GraphicContext c)
-    {
+    public void setGraphicContext(GraphicContext c) {
         gc = c;
     }
 
     /**
      * This constructor supports the create method
      */
-    public PDFDocumentGraphics2D(PDFDocumentGraphics2D g){
+    public PDFDocumentGraphics2D(PDFDocumentGraphics2D g) {
         super(g);
     }
 
@@ -111,7 +133,7 @@ public class PDFDocumentGraphics2D extends PDFGraphics2D {
      * @return     a new graphics context that is a copy of
      *             this graphics context.
      */
-    public Graphics create(){
+    public Graphics create() {
         return new PDFDocumentGraphics2D(this);
     }
 
index 3ac1cd32971fa4b36312239a7e75cfd72fd5bde1..544996af52bf00beaedaa2a44ba5e041d416fa18 100644 (file)
@@ -35,7 +35,7 @@ import java.util.Map;
  * is <tt>AbstractGraphics2D</tt> and makes it easy to start
  * implementing a <tt>Graphic2D</tt> piece-meal.
  *
- * @author <a href="mailto:vincent.hardy@eng.sun.com">Vincent Hardy</a>
+ * @author <a href="mailto:keiron@aftexsw.com">Keiron Liddle</a>
  * @version $Id$
  * @see org.apache.batik.ext.awt.g2d.AbstractGraphics2D
  */
index 1079a9fab438bf0c40ca652458ee984c22f830ab..8b91723cacf3811048201d28df445b515dd40e05 100644 (file)
@@ -67,6 +67,7 @@ import org.apache.batik.transcoder.keys.PaintKey;
 import org.apache.batik.transcoder.keys.Rectangle2DKey;
 import org.apache.batik.transcoder.keys.StringKey;
 import org.apache.batik.transcoder.*;
+import org.apache.batik.transcoder.image.*;
 
 import org.apache.batik.util.SVGConstants;
 
@@ -96,7 +97,7 @@ import org.w3c.dom.svg.SVGSVGElement;
 import org.apache.batik.gvt.renderer.StaticRendererFactory;
 
 /**
- * This class enables to transcode an input to an image of any format.
+ * This class enables to transcode an input to a pdf document.
  *
  * <p>Two transcoding hints (<tt>KEY_WIDTH</tt> and
  * <tt>KEY_HEIGHT</tt>) can be used to respectively specify the image
@@ -119,7 +120,7 @@ import org.apache.batik.gvt.renderer.StaticRendererFactory;
  * stylesheet, and <tt>KEY_PIXEL_TO_MM</tt> to specify the pixel to
  * millimeter conversion factor.
  *
- * @author <a href="mailto:Thierry.Kormann@sophia.inria.fr">Thierry Kormann</a>
+ * @author <a href="mailto:keiron@aftexsw.com">Keiron Liddle</a>
  * @version $Id$
  */
 public class PDFTranscoder extends XMLAbstractTranscoder {
@@ -133,8 +134,7 @@ public class PDFTranscoder extends XMLAbstractTranscoder {
     public PDFTranscoder() {
         hints.put(KEY_DOCUMENT_ELEMENT_NAMESPACE_URI,
                   SVGConstants.SVG_NAMESPACE_URI);
-        hints.put(KEY_DOCUMENT_ELEMENT,
-                  SVGConstants.SVG_SVG_TAG);
+        hints.put(KEY_DOCUMENT_ELEMENT, SVGConstants.SVG_SVG_TAG);
         hints.put(KEY_DOM_IMPLEMENTATION,
                   SVGDOMImplementation.getDOMImplementation());
     }
@@ -147,22 +147,21 @@ public class PDFTranscoder extends XMLAbstractTranscoder {
      * @param output the ouput where to transcode
      * @exception TranscoderException if an error occured while transcoding
      */
-    protected void transcode(Document document,
-                             String uri,
-                             TranscoderOutput output)
-            throws TranscoderException {
+    protected void transcode(Document document, String uri,
+                             TranscoderOutput output) throws TranscoderException {
 
         if (!(document instanceof SVGOMDocument)) {
             throw new TranscoderException(
-                Messages.formatMessage("notsvg", null));
+              Messages.formatMessage("notsvg", null));
         }
-        SVGDocument svgDoc = (SVGDocument)document;
+        SVGDocument svgDoc = (SVGDocument) document;
         SVGSVGElement root = svgDoc.getRootElement();
         // initialize the SVG document with the appropriate context
-        String parserClassname = (String)hints.get(KEY_XML_PARSER_CLASSNAME);
+        String parserClassname =
+          (String) hints.get(KEY_XML_PARSER_CLASSNAME);
         DefaultSVGContext svgCtx = new DefaultSVGContext();
         svgCtx.setPixelToMM(userAgent.getPixelToMM());
-        ((SVGOMDocument)document).setSVGContext(svgCtx);
+        ((SVGOMDocument) document).setSVGContext(svgCtx);
 
         // build the GVT tree
         GVTBuilder builder = new GVTBuilder();
@@ -176,19 +175,19 @@ public class PDFTranscoder extends XMLAbstractTranscoder {
             throw new TranscoderException(ex);
         }
         // get the 'width' and 'height' attributes of the SVG document
-        float docWidth = (float)ctx.getDocumentSize().getWidth();
-        float docHeight = (float)ctx.getDocumentSize().getHeight();
+        float docWidth = (float) ctx.getDocumentSize().getWidth();
+        float docHeight = (float) ctx.getDocumentSize().getHeight();
         ctx = null;
         builder = null;
 
         // compute the image's width and height according the hints
         float imgWidth = -1;
-        if (hints.containsKey(KEY_WIDTH)) {
-            imgWidth = ((Float)hints.get(KEY_WIDTH)).floatValue();
+        if (hints.containsKey(ImageTranscoder.KEY_WIDTH)) {
+            imgWidth = ((Float) hints.get(ImageTranscoder.KEY_WIDTH)).floatValue();
         }
         float imgHeight = -1;
-        if (hints.containsKey(KEY_HEIGHT)) {
-            imgHeight = ((Float)hints.get(KEY_HEIGHT)).floatValue();
+        if (hints.containsKey(ImageTranscoder.KEY_HEIGHT)) {
+            imgHeight = ((Float) hints.get(ImageTranscoder.KEY_HEIGHT)).floatValue();
         }
         float width, height;
         if (imgWidth > 0 && imgHeight > 0) {
@@ -224,12 +223,12 @@ public class PDFTranscoder extends XMLAbstractTranscoder {
             // we want to keep the document size ratio
             float d = Math.max(docWidth, docHeight);
             float dd = Math.max(width, height);
-            float scale = dd/d;
+            float scale = dd / d;
             Px = AffineTransform.getScaleInstance(scale, scale);
         }
         // take the AOI into account if any
-        if (hints.containsKey(KEY_AOI)) {
-            Rectangle2D aoi = (Rectangle2D)hints.get(KEY_AOI);
+        if (hints.containsKey(ImageTranscoder.KEY_AOI)) {
+            Rectangle2D aoi = (Rectangle2D) hints.get(ImageTranscoder.KEY_AOI);
             // transform the AOI into the image's coordinate system
             aoi = Px.createTransformedShape(aoi).getBounds2D();
             AffineTransform Mx = new AffineTransform();
@@ -244,48 +243,28 @@ public class PDFTranscoder extends XMLAbstractTranscoder {
             Px.preConcatenate(Mx);
         }
         // prepare the image to be painted
-        int w = (int)width;
-        int h = (int)height;
-
-        PDFDocumentGraphics2D graphics = new PDFDocumentGraphics2D(true, output.getOutputStream(), w, h);
-               //        GraphicsNodeRenderContext rc = getRenderContext();
-        graphics.setGraphicContext(new org.apache.batik.ext.awt.g2d.GraphicContext());
+        int w = (int) width;
+        int h = (int) height;
+
+        PDFDocumentGraphics2D graphics = new PDFDocumentGraphics2D(true,
+                                         output.getOutputStream(), w, h);
+        graphics.setSVGDimension(docWidth, docHeight);
+        if (hints.containsKey(ImageTranscoder.KEY_BACKGROUND_COLOR)) {
+            graphics.setBackgroundColor((Color) hints.get(ImageTranscoder.KEY_BACKGROUND_COLOR));
+        }
+        //        GraphicsNodeRenderContext rc = getRenderContext();
+        graphics.setGraphicContext(
+          new org.apache.batik.ext.awt.g2d.GraphicContext());
         graphics.setRenderingHints(rc.getRenderingHints());
 
         gvtRoot.paint(graphics, rc);
 
         try {
-                       graphics.finish();
-        } catch (Exception ex) {
-                       ex.printStackTrace();
-            throw new TranscoderException(ex);
-        }
-               /*
-        // paint the SVG document using the bridge package
-        // create the appropriate renderer
-        ImageRenderer renderer = rendFactory.createImageRenderer();
-        renderer.updateOffScreen(w, h);
-        renderer.setTransform(Px);
-        renderer.setTree(gvtRoot);
-        gvtRoot = null; // We're done with it...
-
-        try {
-            // now we are sure that the aoi is the image size
-            Shape raoi = new Rectangle2D.Float(0, 0, width, height);
-            // Warning: the renderer's AOI must be in user space
-            renderer.repaint(Px.createInverse().createTransformedShape(raoi));
-            BufferedImage rend = renderer.getOffScreen();
-            renderer = null; // We're done with it...
-
-                       //            BufferedImage dest = createImage(w, h);
-
-            //Graphics2D g2d = GraphicsUtil.createGraphics(dest);
-
-            //g2d.drawRenderedImage(rend, new AffineTransform());
+            graphics.finish();
         } catch (Exception ex) {
+            ex.printStackTrace();
             throw new TranscoderException(ex);
         }
-               */
     }
 
     public GraphicsNodeRenderContext getRenderContext() {
@@ -293,28 +272,25 @@ public class PDFTranscoder extends XMLAbstractTranscoder {
         if (nodeRenderContext == null) {
             RenderingHints hints = new RenderingHints(null);
             hints.put(RenderingHints.KEY_ANTIALIASING,
-                  RenderingHints.VALUE_ANTIALIAS_ON);
+                      RenderingHints.VALUE_ANTIALIAS_ON);
 
             hints.put(RenderingHints.KEY_INTERPOLATION,
-                  RenderingHints.VALUE_INTERPOLATION_BILINEAR);
+                      RenderingHints.VALUE_INTERPOLATION_BILINEAR);
 
             FontRenderContext fontRenderContext =
-                new FontRenderContext(new AffineTransform(), true, true);
+              new FontRenderContext(new AffineTransform(), true,
+                                    true);
 
             TextPainter textPainter = new StrokingTextPainter();
 
             GraphicsNodeRableFactory gnrFactory =
-                new ConcreteGraphicsNodeRableFactory();
-
-            nodeRenderContext =
-                new GraphicsNodeRenderContext(new AffineTransform(),
-                                          null,
-                                          hints,
-                                          fontRenderContext,
-                                          textPainter,
-                                          gnrFactory);
-                nodeRenderContext.setTextPainter(textPainter);
-            }
+              new ConcreteGraphicsNodeRableFactory();
+
+            nodeRenderContext = new GraphicsNodeRenderContext(
+                                  new AffineTransform(), null, hints,
+                                  fontRenderContext, textPainter, gnrFactory);
+            nodeRenderContext.setTextPainter(textPainter);
+        }
 
         return nodeRenderContext;
     }
@@ -327,8 +303,8 @@ public class PDFTranscoder extends XMLAbstractTranscoder {
      * @param domImpl the DOM Implementation (not used)
      * @param parserClassname the XML parser classname
      */
-    protected DocumentFactory createDocumentFactory(DOMImplementation domImpl,
-                                                    String parserClassname) {
+    protected DocumentFactory createDocumentFactory(
+      DOMImplementation domImpl, String parserClassname) {
         return new SAXSVGDocumentFactory(parserClassname);
     }
 
@@ -375,7 +351,8 @@ public class PDFTranscoder extends XMLAbstractTranscoder {
          */
         public void displayMessage(String message) {
             try {
-                getErrorHandler().warning(new TranscoderException(message));
+                getErrorHandler().warning(
+                  new TranscoderException(message));
             } catch (TranscoderException ex) {
                 throw new RuntimeException();
             }
@@ -386,8 +363,9 @@ public class PDFTranscoder extends XMLAbstractTranscoder {
          * <tt>TranscodingHints</tt> or 0.3528 if any.
          */
         public float getPixelToMM() {
-            if (getTranscodingHints().containsKey(KEY_PIXEL_TO_MM)) {
-                return ((Float)getTranscodingHints().get(KEY_PIXEL_TO_MM)).floatValue();
+            if (getTranscodingHints().containsKey(ImageTranscoder.KEY_PIXEL_TO_MM)) {
+                return ( (Float) getTranscodingHints().get(
+                           ImageTranscoder.KEY_PIXEL_TO_MM)).floatValue();
             } else {
                 // return 0.3528f; // 72 dpi
                 return 0.26458333333333333333333333333333f; // 96dpi
@@ -399,8 +377,8 @@ public class PDFTranscoder extends XMLAbstractTranscoder {
          * <tt>TranscodingHints</tt> or "en" (english) if any.
          */
         public String getLanguages() {
-            if (getTranscodingHints().containsKey(KEY_LANGUAGE)) {
-                return (String)getTranscodingHints().get(KEY_LANGUAGE);
+            if (getTranscodingHints().containsKey(ImageTranscoder.KEY_LANGUAGE)) {
+                return (String) getTranscodingHints().get(ImageTranscoder.KEY_LANGUAGE);
             } else {
                 return "en";
             }
@@ -411,14 +389,16 @@ public class PDFTranscoder extends XMLAbstractTranscoder {
          * <tt>TranscodingHints</tt> or null if any.
          */
         public String getUserStyleSheetURI() {
-            return (String)getTranscodingHints().get(KEY_USER_STYLESHEET_URI);
+            return (String) getTranscodingHints().get(
+                     ImageTranscoder.KEY_USER_STYLESHEET_URI);
         }
 
         /**
          * Returns the XML parser to use from the TranscodingHints.
          */
         public String getXMLParserClassName() {
-            return (String)getTranscodingHints().get(KEY_XML_PARSER_CLASSNAME);
+            return (String) getTranscodingHints().get(
+                     KEY_XML_PARSER_CLASSNAME);
         }
 
         /**
@@ -473,9 +453,8 @@ public class PDFTranscoder extends XMLAbstractTranscoder {
             return false;
         }
 
-        public void registerExtension(BridgeExtension be)
-        {    
-        }    
+        public void registerExtension(BridgeExtension be) {
+        }
     }
 
     protected final static Set FEATURES = new HashSet();
@@ -484,174 +463,4 @@ public class PDFTranscoder extends XMLAbstractTranscoder {
         FEATURES.add(SVGConstants.SVG_ORG_W3C_SVG_LANG_FEATURE);
         FEATURES.add(SVGConstants.SVG_ORG_W3C_SVG_STATIC_FEATURE);
     }
-
-    // --------------------------------------------------------------------
-    // Keys definition
-    // --------------------------------------------------------------------
-
-    /**
-     * The image width key.
-     * <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="1">
-     * <TR>
-     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Key: </TH>
-     * <TD VALIGN="TOP">KEY_WIDTH</TD></TR>
-     * <TR>
-     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Value: </TH>
-     * <TD VALIGN="TOP">Float</TD></TR>
-     * <TR>
-     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Default: </TH>
-     * <TD VALIGN="TOP">The width of the top most svg element</TD></TR>
-     * <TR>
-     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Required: </TH>
-     * <TD VALIGN="TOP">No</TD></TR>
-     * <TR>
-     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Description: </TH>
-     * <TD VALIGN="TOP">Specify the width of the image to create.</TD></TR>
-     * </TABLE> */
-    public static final TranscodingHints.Key KEY_WIDTH
-        = new LengthKey();
-
-    /**
-     * The image height key.
-     * <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="1">
-     * <TR>
-     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Key: </TH>
-     * <TD VALIGN="TOP">KEY_HEIGHT</TD></TR>
-     * <TR>
-     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Value: </TH>
-     * <TD VALIGN="TOP">Float</TD></TR>
-     * <TR>
-     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Default: </TH>
-     * <TD VALIGN="TOP">The height of the top most svg element</TD></TR>
-     * <TR>
-     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Required: </TH>
-     * <TD VALIGN="TOP">No</TD></TR>
-     * <TR>
-     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Description: </TH>
-     * <TD VALIGN="TOP">Specify the height of the image to create.</TD></TR>
-     * </TABLE> */
-    public static final TranscodingHints.Key KEY_HEIGHT
-        = new LengthKey();
-
-    /**
-     * The area of interest key.
-     * <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="1">
-     * <TR>
-     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Key: </TH>
-     * <TD VALIGN="TOP">KEY_AOI</TD></TR>
-     * <TR>
-     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Value: </TH>
-     * <TD VALIGN="TOP">Rectangle2D</TD></TR>
-     * <TR>
-     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Default: </TH>
-     * <TD VALIGN="TOP">The document's size</TD></TR>
-     * <TR>
-     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Required: </TH>
-     * <TD VALIGN="TOP">No</TD></TR>
-     * <TR>
-     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Description: </TH>
-     * <TD VALIGN="TOP">Specify the area of interest to render. The
-     * rectangle coordinates must be specified in pixels and in the
-     * document coordinates system.</TD></TR>
-     * </TABLE>
-     */
-    public static final TranscodingHints.Key KEY_AOI
-        = new Rectangle2DKey();
-
-    /**
-     * The language key.
-     * <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="1">
-     * <TR>
-     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Key: </TH>
-     * <TD VALIGN="TOP">KEY_LANGUAGE</TD></TR>
-     * <TR>
-     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Value: </TH>
-     * <TD VALIGN="TOP">String</TD></TR>
-     * <TR>
-     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Default: </TH>
-     * <TD VALIGN="TOP">"en"</TD></TR>
-     * <TR>
-     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Required: </TH>
-     * <TD VALIGN="TOP">No</TD></TR>
-     * <TR>
-     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Description: </TH>
-     * <TD VALIGN="TOP">Specify the preferred language of the document.
-     * </TD></TR>
-     * </TABLE>
-     */
-    public static final TranscodingHints.Key KEY_LANGUAGE
-        = new StringKey();
-
-    /**
-     * The user stylesheet URI key.
-     * <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="1">
-     * <TR>
-     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Key: </TH>
-     * <TD VALIGN="TOP">KEY_USER_STYLESHEET_URI</TD></TR>
-     * <TR>
-     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Value: </TH>
-     * <TD VALIGN="TOP">String</TD></TR>
-     * <TR>
-     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Default: </TH>
-     * <TD VALIGN="TOP">null</TD></TR>
-     * <TR>
-     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Required: </TH>
-     * <TD VALIGN="TOP">No</TD></TR>
-     * <TR>
-     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Description: </TH>
-     * <TD VALIGN="TOP">Specify the user style sheet.</TD></TR>
-     * </TABLE>
-     */
-    public static final TranscodingHints.Key KEY_USER_STYLESHEET_URI
-        = new StringKey();
-
-    /**
-     * The pixel to millimeter conversion factor key.
-     * <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="1">
-     * <TR>
-     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Key: </TH>
-     * <TD VALIGN="TOP">KEY_PIXEL_TO_MM</TD></TR>
-     * <TR>
-     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Value: </TH>
-     * <TD VALIGN="TOP">Float</TD></TR>
-     * <TR>
-     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Default: </TH>
-     * <TD VALIGN="TOP">0.33</TD></TR>
-     * <TR>
-     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Required: </TH>
-     * <TD VALIGN="TOP">No</TD></TR>
-     * <TR>
-     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Description: </TH>
-     * <TD VALIGN="TOP">Specify the pixel to millimeter conversion factor.
-     * </TD></TR>
-     * </TABLE>
-     */
-    public static final TranscodingHints.Key KEY_PIXEL_TO_MM
-        = new FloatKey();
-
-    /**
-     * The image background paint key.
-     * <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="1">
-     * <TR>
-     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Key: </TH>
-     * <TD VALIGN="TOP">KEY_BACKGROUND_COLOR</TD></TR>
-     * <TR>
-     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Value: </TH>
-     * <TD VALIGN="TOP">Paint</TD></TR>
-     * <TR>
-     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Default: </TH>
-     * <TD VALIGN="TOP">null</TD></TR>
-     * <TR>
-     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Required: </TH>
-     * <TD VALIGN="TOP">No</TD></TR>
-     * <TR>
-     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Description: </TH>
-     * <TD VALIGN="TOP">Specify the background color to use.
-     * The color is required by opaque image formats and is used by
-     * image formats that support alpha channel.</TD></TR>
-     * </TABLE>
-     */
-    public static final TranscodingHints.Key KEY_BACKGROUND_COLOR
-        = new PaintKey();
-
 }