You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by fo...@locus.apache.org on 2000/08/07 13:08:51 UTC
cvs commit: xml-fop/src/org/apache/fop/viewer/resources resources.de resources.ru
fotis 00/08/07 04:08:50
Modified: src/org/apache/fop/apps AWTCommandLine.java
src/org/apache/fop/render/awt AWTRenderer.java
src/org/apache/fop/viewer IconToolBar.java
LoadableProperties.java MessageException.java
MessagesDialog.java PreviewDialog.java
PreviewDialogAboutBox.java ProgressListener.java
SecureResourceBundle.java Translator.java
UserMessage.java
src/org/apache/fop/viewer/resources resources.de
resources.ru
Added: src/org/apache/fop/viewer GoToPageDialog.java
Log:
updates AWT viewer to new SVG support, implements a goto function for the user
Revision Changes Path
1.8 +9 -7 xml-fop/src/org/apache/fop/apps/AWTCommandLine.java
Index: AWTCommandLine.java
===================================================================
RCS file: /home/cvs/xml-fop/src/org/apache/fop/apps/AWTCommandLine.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- AWTCommandLine.java 2000/07/15 11:37:05 1.7
+++ AWTCommandLine.java 2000/08/07 11:08:34 1.8
@@ -2,9 +2,9 @@
package org.apache.fop.apps;
/*
originally contributed by
- Juergen Verwohlt: Juergen.Verwohlt@jcatalog.com,
- Rainer Steinkuhle: Rainer.Steinkuhle@jcatalog.com,
- Stanislav Gorkhover: Stanislav.Gorkhover@jcatalog.com
+ Juergen Verwohlt: Juergen.Verwohlt@jCatalog.com,
+ Rainer Steinkuhle: Rainer.Steinkuhle@jCatalog.com,
+ Stanislav Gorkhover: Stanislav.Gorkhover@jCatalog.com
*/
import org.apache.fop.messaging.MessageHandler;
import org.apache.fop.viewer.*;
@@ -60,7 +60,6 @@
UserMessage.setTranslator(getResourceBundle(TRANSLATION_PATH + "messages." + language));
resource.setMissingEmphasized(false);
-
AWTRenderer renderer = new AWTRenderer(resource);
PreviewDialog frame = createPreviewDialog(renderer, resource);
renderer.setProgressListener(frame);
@@ -80,7 +79,7 @@
parser.setFeature("http://xml.org/sax/features/namespace-prefixes", true);
} catch (SAXException e) {
MessageHandler.errorln("Error in setting up parser feature namespace-prefixes");
- MessageHandler.errorln("You need a parser which supports SAX version 2");
+ MessageHandler.errorln("You need a parser which supports SAX version 2");
System.exit(1);
}
@@ -93,6 +92,8 @@
driver.addElementMapping("org.apache.fop.fo.StandardElementMapping");
driver.addElementMapping("org.apache.fop.svg.SVGElementMapping");
+ driver.addPropertyList("org.apache.fop.fo.StandardPropertyListMapping");
+ driver.addPropertyList("org.apache.fop.svg.SVGPropertyListMapping");
// build FO tree: time
frame.progress(resource.getString("Build FO tree") + " ...");
@@ -107,6 +108,7 @@
driver.render();
frame.progress(resource.getString("Show"));
+ frame.showPage();
} catch (Exception e) {
MessageHandler.errorln("FATAL ERROR: " + e.getMessage());
@@ -167,7 +169,6 @@
* @return the InputSource created
*/
protected static InputSource fileInputSource(String filename) {
-
/* this code adapted from James Clark's in XT */
File file = new File(filename);
String path = file.getAbsolutePath();
@@ -216,7 +217,7 @@
if (args.length < 1 || args.length > 3) {
MessageHandler.errorln("usage: java AWTCommandLine " +
"formatting-object-file [language] ");
- System.exit(1);
+ System.exit(1);
}
srcPath = args[0];
@@ -228,4 +229,5 @@
} // main
} // AWTCommandLine
+
1.9 +557 -56 xml-fop/src/org/apache/fop/render/awt/AWTRenderer.java
Index: AWTRenderer.java
===================================================================
RCS file: /home/cvs/xml-fop/src/org/apache/fop/render/awt/AWTRenderer.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- AWTRenderer.java 2000/08/03 05:08:30 1.8
+++ AWTRenderer.java 2000/08/07 11:08:38 1.9
@@ -4,9 +4,9 @@
/*
originally contributed by
- Juergen Verwohlt: Juergen.Verwohlt@af-software.de,
- Rainer Steinkuhle: Rainer.Steinkuhle@af-software.de,
- Stanislav Gorkhover: Stanislav.Gorkhover@af-software.de
+ Juergen Verwohlt: Juergen.Verwohlt@jCatalog.com,
+ Rainer Steinkuhle: Rainer.Steinkuhle@jCatalog.com,
+ Stanislav Gorkhover: Stanislav.Gorkhover@jCatalog.com
*/
import org.apache.fop.layout.*;
@@ -28,6 +28,7 @@
import java.awt.geom.*;
import java.awt.font.*;
import java.util.*;
+import java.net.URL;
import java.io.*;
import java.beans.*;
import javax.swing.*;
@@ -59,7 +60,7 @@
*/
private BufferedImage pageImage = null;
private Graphics2D graphics = null;
-
+
/**
* The current (internal) font name
*/
@@ -92,6 +93,7 @@
*/
private int currentAreaContainerXPosition = 0;
+
static {
JAVA_FONT_NAMES = new Hashtable();
JAVA_FONT_NAMES.put("Times", "serif");
@@ -115,7 +117,7 @@
public void setScaleFactor(double newScaleFactor) {
scaleFactor = newScaleFactor;
- }
+ }
public double getScaleFactor() {
return scaleFactor;
@@ -140,6 +142,7 @@
protected void addLine(int x1, int y1, int x2, int y2, int th,
float r, float g, float b) {
graphics.setColor(new Color (r,g,b));
+ // graphics.setColor(Color.red);
graphics.drawLine((int)(x1/1000f), pageHeight - (int)(y1/1000f),
(int)(x2/1000f), pageHeight - (int)(y2/1000f));
}
@@ -159,8 +162,9 @@
protected void addRect(int x, int y, int w, int h,
float r, float g, float b) {
graphics.setColor(new Color (r,g,b));
- graphics.fill3DRect((int) (x/1000f), pageHeight - (int) (y/1000f),
- (int) (w/1000f), -(int) (h/1000f),false);
+ // graphics.setColor(Color.green);
+ graphics.drawRect((int) (x/1000f), pageHeight - (int) (y/1000f),
+ (int) (w/1000f), -(int) (h/1000f));
}
/**
@@ -186,11 +190,11 @@
}
/**
- * Vor dem Druck einzustellen:
+ * To configure before print.
*
- * Seite/Seiten w�hlen
- * Zoomfaktor
- * Seitenformat / Quer- oder Hoch
+ * Choose pages
+ * Zoom factor
+ * Page format / Landscape or Portrait
**/
public void transform(Graphics2D g2d, double zoomPercent, double angle) {
AffineTransform at = g2d.getTransform();
@@ -225,27 +229,28 @@
if (tree == null) {
return 0;
}
-
+
return tree.getPages().size();
}
public void render(int aPageNumber) {
if (tree != null) {
- try {
+ try {
render(tree, aPageNumber);
} catch (IOException e) {
+ e.printStackTrace();
// This exception can't occur because we are not dealing with
// any files.
}
}
}
-
+
public void render(AreaTree areaTree, PrintWriter writer)
throws IOException {
tree = areaTree;
- render(areaTree,0);
+ render(areaTree, 0);
}
-
+
public void render(AreaTree areaTree, int aPageNumber)
throws IOException {
tree = areaTree;
@@ -253,14 +258,14 @@
pageWidth = (int)((float)page.getWidth() / 1000f);
pageHeight = (int)((float)page.getHeight() / 1000f);
+
-
pageImage = new BufferedImage((int)((pageWidth * (int)scaleFactor)/100),
(int)((pageHeight * (int)scaleFactor)/100),
BufferedImage.TYPE_INT_RGB);
graphics = pageImage.createGraphics();
-
+
transform(graphics, scaleFactor, 0);
drawFrame();
@@ -286,6 +291,13 @@
if (after != null) {
renderAreaContainer(after);
}
+
+ // SG: Wollen wir Links abbilden?
+ /*
+ if (page.hasLinks()) {
+ ....
+ }
+ */
}
public void renderAreaContainer(AreaContainer area) {
@@ -320,7 +332,7 @@
(org.apache.fop.layout.Box) e.nextElement();
b.render(this);
}
-
+
if (area.getPosition() !=
org.apache.fop.fo.properties.Position.STATIC) {
this.currentYPosition = saveY;
@@ -338,7 +350,7 @@
if (area instanceof BlockArea) {
rx += ((BlockArea)area).getStartIndent();
}
-
+
h = area.getContentHeight();
int ry = this.currentYPosition;
ColorType bg = area.getBackgroundColor();
@@ -461,9 +473,9 @@
try {
byte[] map = img.getBitmaps();
-
+
String path = img.getURL();
-
+
ImageIcon icon = new ImageIcon(path);
Image imgage = icon.getImage();
@@ -584,54 +596,32 @@
Color oldColor = graphics.getColor();
graphics.setColor(new Color(r, g, b));
-
graphics.fillRect((int)(rx / 1000f), (int)(pageHeight - ry / 1000f),
(int)(w / 1000f), (int)(th / 1000f));
graphics.setColor(oldColor);
}
- /** render a foreign object area */
- public void renderForeignObjectArea(ForeignObjectArea area)
- {
- // if necessary need to scale and align the content
- area.getObject().render(this);
- }
-
public void renderSVGArea(SVGArea area) {
+
int x = this.currentAreaContainerXPosition;
int y = this.currentYPosition;
int w = area.getContentWidth();
int h = area.getHeight();
+
+ Enumeration e = area.getChildren().elements();
+ while (e.hasMoreElements()) {
+ Object o = e.nextElement();
+ if(o instanceof GraphicImpl) {
+ renderElement(area, (GraphicImpl)o, x, y, null);
+ }
+ }
+
this.currentYPosition -= h;
-
-// Enumeration e = area.getChildren().elements();
-// while (e.hasMoreElements()) {
-// Object o = e.nextElement();
-// if (o instanceof RectGraphic) {
-// int rx = ((RectGraphic)o).x;
-// int ry = ((RectGraphic)o).y;
-// int rw = ((RectGraphic)o).width;
-// int rh = ((RectGraphic)o).height;
-// addRect(x+rx,y-ry,rw,-rh,0,0,0);
-// } else if (o instanceof LineGraphic) {
-// int x1 = ((LineGraphic)o).x1;
-// int y1 = ((LineGraphic)o).y1;
-// int x2 = ((LineGraphic)o).x2;
-// int y2 = ((LineGraphic)o).y2;
-// addLine(x+x1,y-y1,x+x2,y-y2,0,0,0,0);
-// } else if (o instanceof TextGraphic) {
-// int tx = ((TextGraphic)o).x;
-// int ty = ((TextGraphic)o).y;
-// String s = ((TextGraphic)o).s;
-// currentStream.add("1 0 0 1 "
-// + ((x+tx)/1000f) + " "
-// + ((y-ty)/1000f) + " Tm "
-// + "(" + s + ") Tj\n");
-// }
-// }
+
}
+
protected String getJavaFontName(String aName) {
if (aName == null)
return null;
@@ -697,6 +687,517 @@
return new Color(ct.red(), ct.green(), ct.blue());
}
+
+
+ /**
+ * Draws an image.
+ * TODO: protect other image formats (JIMI)
+ */
+ public void renderImage(String href, float x, float y, float width, float height, Vector transform) {
+ // What is with transformations?
+ try {
+ URL url = new URL(href);
+ ImageIcon imageIcon = new ImageIcon(url);
+
+ AffineTransform fullTransform = new AffineTransform();
+ AffineTransform aTransform;
+
+ transform = (transform == null) ? new Vector() : transform;
+ for (int i = 0; i < transform.size(); i++) {
+ org.w3c.dom.svg.SVGTransform t = (org.w3c.dom.svg.SVGTransform)transform.elementAt(i);
+ SVGMatrix matrix = t.getMatrix();
+ aTransform = new AffineTransform(matrix.getA(), matrix.getB(), matrix.getC(),
+ matrix.getD(), matrix.getE(), matrix.getF());
+ fullTransform.concatenate(aTransform);
+ }
+
+ BufferedImage bi = new BufferedImage((int) width, (int) height, BufferedImage.TYPE_INT_RGB);
+ Graphics2D g2d = bi.createGraphics();
+ BufferedImageOp bop = new AffineTransformOp(fullTransform,
+ AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
+ g2d.drawImage(imageIcon.getImage(), 0, 0, (int) width, (int) height, imageIcon.getImageObserver());
+ graphics.drawImage(bi, bop, (int) x, (int) y);
+ } catch (Exception ex) {
+ MessageHandler.errorln("AWTRenderer: renderImage(): " + ex.getMessage());
+ }
+ }
+
+
+
+ public void renderElement(SVGArea svgarea, GraphicImpl area, int posx, int posy,
+ Vector parentTransforms) {
+ int x = posx;
+ int y = posy;
+ Hashtable style = area.oldgetStyle();
+ DrawingInstruction di = createInstruction(area, style);
+
+ Object o = null;
+ Vector v = area.oldgetTransform();
+ v = (v == null) ? new Vector() : v;
+ Vector trans = new Vector(v);
+ parentTransforms = (parentTransforms == null) ? new Vector() : parentTransforms;
+
+ if (parentTransforms != null) {
+ trans.addAll(0, parentTransforms);
+ }
+
+ float red = (float) graphics.getColor().getRed();
+ float green = (float) graphics.getColor().getGreen();
+ float blue = (float) graphics.getColor().getBlue();
+ Color c = null;
+
+ ColorType ct = null;
+ try {
+ o = style.get("fill");
+ if (o != null && o instanceof ColorType) {
+ ct = (ColorType) o;
+ c = new Color((int) (ct.red() * 255f), (int) (ct.green() * 255f), (int) (ct.blue() * 255f));
+ }
+ o = style.get("stroke");
+ if (c == null && o != null && o instanceof ColorType) {
+ ct = (ColorType) o;
+ c = new Color((int) (ct.red() * 255f), (int) (ct.green() * 255f), (int) (ct.blue() * 255f));
+ }
+ } catch (Exception ex) {
+ MessageHandler.errorln("Can't set color: R G B : " + (int) (ct.red() * 255f) + " " + (int) (ct.green() * 255f) + " " + (int) (ct.blue() * 255f));
+ c = Color.pink;
+ }
+
+ if (c == null) {
+ c = new Color((int) red, (int) green, (int) blue);
+ }
+ Color oldColor = graphics.getColor();
+
+ if (area instanceof SVGLineElement) {
+ graphics.setColor(c);
+ SVGLineElementImpl lg = (SVGLineElementImpl) area;
+
+ float x1 = lg.getX1().getBaseVal().getValue() * 1000 + posx;
+ float y1 = posy - lg.getY1().getBaseVal().getValue() * 1000 ;
+ float x2 = lg.getX2().getBaseVal().getValue() * 1000 + posx;
+ float y2 = posy - lg.getY2().getBaseVal().getValue() * 1000;
+ // TODO:
+ // The thickness of contour protect.
+ int th = 1;
+ o = style.get("stroke-width");
+ if (o != null)
+ th = (int)((SVGLengthImpl)o).getValue();
+ Line2D.Double aLine = new Line2D.Double(x1 / 1000f, pageHeight - y1 / 1000f,
+ x2 / 1000f, pageHeight - y2 / 1000f);
+ drawShape(transformShape(trans, aLine), di);
+ graphics.setColor(oldColor);
+ } else if (area instanceof SVGRectElement) {
+ graphics.setColor(c);
+ SVGRectElement rg = (SVGRectElement)area;
+ float rectx = rg.getX().getBaseVal().getValue() * 1000 + posx;
+ float recty = posy - rg.getY().getBaseVal().getValue() * 1000;
+ float rx = rg.getRx().getBaseVal().getValue() * 1000;
+ float ry = rg.getRy().getBaseVal().getValue() * 1000;
+ float rw = rg.getWidth().getBaseVal().getValue() * 1000;
+ float rh = rg.getHeight().getBaseVal().getValue() * 1000;
+
+ // TODO:
+ // rx and ry are roundings.
+ // RoundRectangle2D.Double
+ Rectangle aRectangle = new Rectangle();
+ aRectangle.setRect(rectx / 1000d, pageHeight - recty / 1000d, rw / 1000d, rh / 1000d);
+ drawShape(transformShape(trans, aRectangle), di);
+ graphics.setColor(oldColor);
+ } else if (area instanceof SVGCircleElement) {
+ graphics.setColor(c);
+ SVGCircleElement cg = (SVGCircleElement)area;
+ float cx = cg.getCx().getBaseVal().getValue() * 1000 + posx;
+ float cy = posy - cg.getCy().getBaseVal().getValue() * 1000;
+ float r = cg.getR().getBaseVal().getValue();
+ Ellipse2D.Double anEllipse = new Ellipse2D.Double(cx / 1000d - r,
+ pageHeight - cy / 1000d - r,
+ r * 2d, r * 2d);
+ drawShape(transformShape(trans, anEllipse), di);
+ graphics.setColor(oldColor);
+ } else if (area instanceof SVGEllipseElement) {
+ graphics.setColor(c);
+ SVGEllipseElement cg = (SVGEllipseElement)area;
+ float cx = cg.getCx().getBaseVal().getValue() * 1000 + posx;
+ float cy = posy - cg.getCy().getBaseVal().getValue() * 1000;
+ float rx = cg.getRx().getBaseVal().getValue();
+ float ry = cg.getRy().getBaseVal().getValue();
+ Ellipse2D.Double anEllipse = new Ellipse2D.Double(cx / 1000d - rx,
+ pageHeight - cy / 1000d - ry,
+ rx * 2d, ry * 2d);
+ drawShape(transformShape(trans, anEllipse), di);
+ graphics.setColor(oldColor);
+ } else if (area instanceof SVGImageElementImpl) {
+ SVGImageElementImpl ig = (SVGImageElementImpl)area;
+ renderImage(ig.link, ig.x + posx / 1000f, pageHeight - (posy / 1000f - ig.y), ig.width, ig.height, trans);
+ } else if(area instanceof SVGUseElementImpl) {
+ SVGUseElementImpl ug = (SVGUseElementImpl)area;
+ String ref = ug.link;
+ ref = ref.substring(1, ref.length());
+ GraphicImpl graph = null;
+ graph = area.locateDef(ref);
+ if(graph != null) {
+ // probably not the best way to do this, should be able
+ // to render without the style being set.
+ GraphicImpl parent = graph.getGraphicParent();
+ graph.setParent(area);
+ // need to clip (if necessary) to the use area
+ // the style of the linked element is as if is was
+ // a direct descendant of the use element.
+
+ renderElement(svgarea, graph, posx, posy, trans);
+ graph.setParent(parent);
+ }
+ } else if (area instanceof SVGPolylineElementImpl) {
+ graphics.setColor(c);
+ Vector points = ((SVGPolylineElementImpl)area).points;
+ PathPoint p = null;
+ Point2D.Double p1 = null;
+ Point2D.Double p2 = null;
+ if (points.size() > 0) {
+ p = (PathPoint) points.elementAt(0);
+ double xc = p.x * 1000f + posx;
+ double yc = posy - p.y * 1000f;
+ p1 = new Point2D.Double(xc / 1000f, pageHeight - yc / 1000f);
+
+ int[] xarr = {(int) xc};
+ int[] yarr = {(int) yc};
+ graphics.drawPolyline(xarr, yarr, 1);
+ }
+ Line2D.Double aLine;
+ for (int i = 1; i< points.size(); i++) {
+ p = (PathPoint) points.elementAt(i);
+ p2 = new Point2D.Double(p.x + posx / 1000f, pageHeight - (posy - p.y * 1000f) / 1000f);
+ aLine = new Line2D.Double(p1, p2);
+ graphics.draw(transformShape(trans, aLine));
+ p1 = p2;
+ }
+ graphics.setColor(oldColor);
+ } else if (area instanceof SVGPolygonElementImpl) {
+ graphics.setColor(c);
+ java.awt.Polygon aPolygon = convertPolygon(((SVGPolygonElementImpl)area), posx, posy);
+ drawShape(transformShape(trans, aPolygon), di);
+ graphics.setColor(oldColor);
+ } else if (area instanceof SVGGElementImpl) {
+ renderGArea(svgarea, (SVGGElementImpl)area, x, y, parentTransforms);
+ } else if (area instanceof SVGPathElementImpl) {
+ graphics.setColor(c);
+ GeneralPath path = convertPath((SVGPathElementImpl) area, posx, posy);
+ drawShape(transformShape(trans, path), di);
+ graphics.setColor(oldColor);
+ } else if (area instanceof SVGTextElementImpl) {
+ MessageHandler.errorln("SVGTextElementImpl is not implemented yet.");
+ // renderText(svgarea, (SVGTextElementImpl)area, 0, 0, di);
+ } else if (area instanceof SVGArea) {
+ // the x and y pos will be wrong!
+ Enumeration e = ((SVGArea)area).getChildren().elements();
+ while (e.hasMoreElements()) {
+ Object el = e.nextElement();
+ if(o instanceof GraphicImpl) {
+ renderElement((SVGArea)area, (GraphicImpl)el, x, y, parentTransforms);
+ }
+ }
+ }
+
+ // should be done with some cleanup code, so only
+ // required values are reset.
+ } // renderElement
+
+
+ public void renderGArea(SVGArea svgarea, SVGGElementImpl area, int posx, int posy, Vector v) {
+
+
+ Vector trans = new Vector(area.oldgetTransform());
+ trans.addAll(0, v);
+ Enumeration e = area.getChildren().elements();
+ while (e.hasMoreElements()) {
+ Object o = e.nextElement();
+ if(o instanceof GraphicImpl) {
+ renderElement(svgarea, (GraphicImpl)o, posx, posy, trans);
+ }
+ }
+ }
+ public void renderGArea(SVGArea svgarea, SVGGElementImpl area, int posx, int posy)
+ {
+ renderGArea(svgarea, area, posx, posy, new Vector());
+ }
+
+
+ /**
+ * Applies SVGTransform to the shape and gets the transformed shape.
+ * The type of the new shape may be different to the original type.
+ */
+ public Shape transformShape(Vector trans, Shape shape) {
+ if (trans == null || trans.size() == 0) {
+ return shape;
+ }
+
+ AffineTransform at;
+ for(int i = trans.size() - 1; i >= 0; i--) {
+ org.w3c.dom.svg.SVGTransform t = (org.w3c.dom.svg.SVGTransform)trans.elementAt(i);
+ SVGMatrix matrix = t.getMatrix();
+ at = new AffineTransform(matrix.getA(), matrix.getB(), matrix.getC(),
+ matrix.getD(), matrix.getE(), matrix.getF());
+ shape = at.createTransformedShape(shape);
+ }
+ return shape;
+ }
+
+
+ /**
+ * Mapps a SVG-Polygon to a AWT-Polygon.
+ */
+ public java.awt.Polygon convertPolygon(SVGPolygonElementImpl svgpl, int x, int y) {
+ java.awt.Polygon aPolygon = new java.awt.Polygon();
+ Vector points = svgpl.points;
+
+ PathPoint p;
+ for (int i = 0; i < points.size(); i++) {
+ p = (PathPoint) points.elementAt(i);
+ aPolygon.addPoint((int) (x / 1000f + p.x), pageHeight - (int) (y / 1000f - p.y));
+ }
+
+ return aPolygon;
+ }
+
+ // TODO: other attributes of DrawingInstruction protect too.
+ protected DrawingInstruction createInstruction(GraphicImpl area, Hashtable style) {
+ DrawingInstruction di = new DrawingInstruction();
+ Object sp;
+ sp = style.get("fill");
+ if(sp != null && !(sp instanceof String && sp.equals("none"))) {
+ di.fill = true;
+ }
+ // ...
+ return di;
+ }
+
+ // Draws a shape.
+ // TODO: other attributes of DrawingInstruction protect too.
+ protected void drawShape(Shape s, DrawingInstruction di) {
+ if (di.fill) {
+ graphics.fill(s);
+ } else {
+ graphics.draw(s);
+ }
+ }
+
+ /**
+ * Mapps a SVG-Path to a AWT-GeneralPath.
+ */
+ public GeneralPath convertPath(SVGPathElementImpl svgpath, float x, float y) {
+ Vector points = svgpath.pathElements;
+ GeneralPath path = new GeneralPath();
+
+ float lastx = 0;
+ float lasty = 0;
+ SVGPathSegImpl pathmoveto = null;
+
+ for(Enumeration e = points.elements(); e.hasMoreElements(); ) {
+ SVGPathSegImpl pc = (SVGPathSegImpl)e.nextElement();
+ float[] vals = pc.getValues();
+ float lastcx = 0;
+ float lastcy = 0;
+ switch(pc.getPathSegType()) {
+ case SVGPathSeg.PATHSEG_MOVETO_ABS:
+ lastx = vals[0];
+ lasty = vals[1];
+ pathmoveto = pc;
+ path.moveTo(lastx + x / 1000f, pageHeight - y / 1000f + lasty);
+ break;
+ case SVGPathSeg.PATHSEG_MOVETO_REL:
+ if (pathmoveto == null) {
+ lastx = vals[0];
+ lasty = vals[1];
+ path.moveTo(lastx + x / 1000f, pageHeight - y / 1000f + lasty);
+ pathmoveto = pc;
+ } else {
+ lastx += vals[0];
+ lasty += vals[1];
+ path.lineTo(lastx + x / 1000f, pageHeight - y / 1000f + lasty);
+
+ }
+ break;
+ case SVGPathSeg.PATHSEG_LINETO_ABS:
+ lastx = vals[0];
+ lasty = vals[1];
+ path.lineTo(lastx + x / 1000f, pageHeight - y / 1000f + lasty);
+ break;
+ case SVGPathSeg.PATHSEG_LINETO_REL:
+ lastx += vals[0];
+ lasty += vals[1];
+ path.lineTo(lastx + x / 1000f, pageHeight - y / 1000f + lasty);
+ break;
+ case SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS:
+ lasty = vals[0];
+ path.lineTo(lastx + x / 1000f, pageHeight - y / 1000f + lasty);
+ break;
+ case SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL:
+ lasty += vals[0];
+ path.lineTo(lastx + x / 1000f, pageHeight - y / 1000f + lasty);
+ break;
+ case SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS:
+ lastx = vals[0];
+ path.lineTo(lastx + x / 1000f, pageHeight - y / 1000f + lasty);
+ break;
+ case SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL:
+ lastx += vals[0];
+ path.lineTo(lastx + x / 1000f, pageHeight - y / 1000f + lasty);
+ break;
+ case SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS:
+ lastx = vals[4];
+ lasty = vals[5];
+ lastcx = vals[2];
+ lastcy = vals[3];
+ path.curveTo(x / 1000f + vals[0], pageHeight - y / 1000f + vals[1],
+ x / 1000f + lastcx, pageHeight - y / 1000f + lastcy,
+ x / 1000f + lastx, pageHeight - y / 1000f + lasty);
+ break;
+ case SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL:
+ path.curveTo(x / 1000f + vals[0] + lastx, pageHeight - y / 1000f + vals[1] + lasty,
+ x / 1000f + lastx + vals[2], pageHeight - y / 1000f + lasty + vals[3],
+ x / 1000f + lastx + vals[4], pageHeight - y / 1000f + lasty + vals[5]);
+ lastcx = vals[2] + lastx;
+ lastcy = vals[3] + lasty;
+ lastx += vals[4];
+ lasty += vals[5];
+ break;
+ case SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS:
+ if (lastcx == 0)
+ lastcx = lastx;
+ if (lastcy == 0)
+ lastcy = lasty;
+ lastx = vals[2];
+ lasty = vals[3];
+ path.curveTo(x / 1000f + lastcx, pageHeight - y / 1000f + lastcy,
+ x / 1000f + vals[0], pageHeight - y / 1000f + vals[1],
+ x / 1000f + lastx, pageHeight - y / 1000f + lasty);
+ break;
+ case SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL:
+ if (lastcx == 0)
+ lastcx = lastx;
+ if (lastcy == 0)
+ lastcy = lasty;
+ path.curveTo(x / 1000f + lastcx, pageHeight - y / 1000f + lastcy,
+ x / 1000f + lastx + vals[0], pageHeight - y / 1000f + lasty + vals[1],
+ x / 1000f + lastx + vals[2], pageHeight - y / 1000f + lasty + vals[3]);
+ lastx += vals[2];
+ lasty += vals[3];
+ break;
+ case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS:
+ if (lastcx == 0)
+ lastcx = lastx;
+ if (lastcy == 0)
+ lastcy = lasty;
+ lastx = vals[0];
+ lasty = vals[1];
+ lastcx = 0;
+ lastcy = 0;
+ path.quadTo(x / 1000f + lastcx, pageHeight - y / 1000f + lastcy,
+ x / 1000f + lastx, pageHeight - y / 1000f + lasty);
+ break;
+ case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL:
+ if (lastcx == 0)
+ lastcx = lastx;
+ if (lastcy == 0)
+ lastcy = lasty;
+
+ path.quadTo(x / 1000f + lastcx , pageHeight - y / 1000f + lastcy,
+ x / 1000f + lastx + vals[0], pageHeight - y / 1000f + lasty + vals[1]);
+
+ lastx += vals[0];
+ lasty += vals[1];
+ lastcx = 0;
+ lastcy = 0;
+ break;
+ case SVGPathSeg.PATHSEG_ARC_ABS: {
+ // Arc2D.Double arc = new Arc2D.Double();
+ // arc.setAngles(current point, end point); ....
+ double rx = vals[0];
+ double ry = vals[1];
+ double theta = vals[2];
+ boolean largearcflag = (vals[3] == 1.0);
+ boolean sweepflag = (vals[4] == 1.0);
+
+ double cx = lastx;
+ double cy = lasty;
+
+ path.curveTo(x / 1000f + lastx, pageHeight - y / 1000f + lasty,
+ x / 1000f + vals[0], pageHeight - y / 1000f + vals[1],
+ x / 1000f + vals[5], pageHeight - y / 1000f + vals[6]);
+
+ lastcx = 0; //??
+ lastcy = 0; //??
+ lastx = vals[5];
+ lasty = vals[6];
+ }
+ break;
+ case SVGPathSeg.PATHSEG_ARC_REL: {
+ double rx = vals[0];
+ double ry = vals[1];
+ double theta = vals[2];
+ boolean largearcflag = (vals[3] == 1.0);
+ boolean sweepflag = (vals[4] == 1.0);
+
+ path.curveTo(x / 1000f + lastx, pageHeight - y / 1000f + lasty,
+ x / 1000f + (vals[0] + lastx), pageHeight - y / 1000f + (vals[1] + lasty),
+ x / 1000f + (vals[5] + lastx) , pageHeight - y / 1000f + (vals[6] + lasty));
+ lastcx = 0; //??
+ lastcy = 0; //??
+ lastx += vals[5];
+ lasty += vals[6];
+ }
+ break;
+ case SVGPathSeg.PATHSEG_CLOSEPATH:
+ path.closePath();
+ break;
+
+
+ } // switch
+ } // for points.elements()
+
+ return path;
+ } // convertPath
+/*
+ if(di == null) {
+ currentStream.add("S\n");
+ } else {
+ if(di.fill) {
+ if(di.stroke) {
+ if(!di.nonzero)
+ currentStream.add("B*\n");
+ else
+ currentStream.add("B\n");
+ } else {
+ if(!di.nonzero)
+ currentStream.add("f*\n");
+ else
+ currentStream.add("f\n");
+ }
+ } else {
+// if(di.stroke)
+ currentStream.add("S\n");
+ }
+ }
+*/
+
+ /*
+ * by pdfrenderer �bernommen.
+ *
+ */
+ class DrawingInstruction {
+ boolean stroke = false;
+ boolean nonzero = false; // non-zero fill rule "f*", "B*" operator
+ boolean fill = false;
+ int linecap = 0; // butt
+ int linejoin = 0; // miter
+ int miterwidth = 8;
+ }
+
+ public void renderForeignObjectArea(ForeignObjectArea area) {
+ area.getObject().render(this);
+ }
+
}
+
1.2 +3 -3 xml-fop/src/org/apache/fop/viewer/IconToolBar.java
Index: IconToolBar.java
===================================================================
RCS file: /home/cvs/xml-fop/src/org/apache/fop/viewer/IconToolBar.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- IconToolBar.java 1999/11/25 19:21:11 1.1
+++ IconToolBar.java 2000/08/07 11:08:39 1.2
@@ -2,9 +2,9 @@
/*
originally contributed by
- Juergen Verwohlt: Juergen.Verwohlt@af-software.de,
- Rainer Steinkuhle: Rainer.Steinkuhle@af-software.de,
- Stanislav Gorkhover: Stanislav.Gorkhover@af-software.de
+ Juergen Verwohlt: Juergen.Verwohlt@jCatalog.com,
+ Rainer Steinkuhle: Rainer.Steinkuhle@jCatalog.com,
+ Stanislav Gorkhover: Stanislav.Gorkhover@jCatalog.com
*/
1.3 +1 -1 xml-fop/src/org/apache/fop/viewer/LoadableProperties.java
Index: LoadableProperties.java
===================================================================
RCS file: /home/cvs/xml-fop/src/org/apache/fop/viewer/LoadableProperties.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- LoadableProperties.java 2000/06/27 22:14:33 1.2
+++ LoadableProperties.java 2000/08/07 11:08:39 1.3
@@ -13,7 +13,7 @@
* Schl�sselwerte mit Leerzeichen zu.
*
* @version 02.12.99
- * @author Stanislav.Gorkhover@af-software.de
+ * @author Stanislav.Gorkhover@jCatalog.com
*
*/
public class LoadableProperties extends Hashtable {
1.2 +1 -1 xml-fop/src/org/apache/fop/viewer/MessageException.java
Index: MessageException.java
===================================================================
RCS file: /home/cvs/xml-fop/src/org/apache/fop/viewer/MessageException.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- MessageException.java 2000/01/25 13:58:04 1.1
+++ MessageException.java 2000/08/07 11:08:39 1.2
@@ -9,7 +9,7 @@
* Aufrufer hochgereicht werden, bis schliesslich ein Aufrufer die
* Meldung zur Anzeige bringt.
*
- * @author Juergen.Verwohlt@af-software.de
+ * @author Juergen.Verwohlt@jCatalog.com
* @version 1.0 28.05.99
*
*/
1.2 +1 -1 xml-fop/src/org/apache/fop/viewer/MessagesDialog.java
Index: MessagesDialog.java
===================================================================
RCS file: /home/cvs/xml-fop/src/org/apache/fop/viewer/MessagesDialog.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- MessagesDialog.java 2000/01/25 13:58:04 1.1
+++ MessagesDialog.java 2000/08/07 11:08:39 1.2
@@ -18,7 +18,7 @@
* eine Detailanzeige einzublenden, in der z.B. bei Fehlern der StackTrace ausgegeben
* werden kann.
*
- * @author Juergen.Verwohlt@af-software.de
+ * @author Juergen.Verwohlt@jCatalog.com
* @version 1.0 09.06.99
*/
public class MessagesDialog extends JOptionPane {
1.5 +32 -6 xml-fop/src/org/apache/fop/viewer/PreviewDialog.java
Index: PreviewDialog.java
===================================================================
RCS file: /home/cvs/xml-fop/src/org/apache/fop/viewer/PreviewDialog.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- PreviewDialog.java 2000/04/13 19:25:30 1.4
+++ PreviewDialog.java 2000/08/07 11:08:40 1.5
@@ -2,12 +2,11 @@
/*
originally contributed by
- Juergen Verwohlt: Juergen.Verwohlt@af-software.de,
- Rainer Steinkuhle: Rainer.Steinkuhle@af-software.de,
- Stanislav Gorkhover: Stanislav.Gorkhover@af-software.de
+ Juergen Verwohlt: Juergen.Verwohlt@jCatalog.com,
+ Rainer Steinkuhle: Rainer.Steinkuhle@jCatalog.com,
+ Stanislav Gorkhover: Stanislav.Gorkhover@jCatalog.com
*/
-
import java.awt.*;
import java.awt.print.*;
import java.awt.event.*;
@@ -61,7 +60,7 @@
public PreviewDialog(AWTRenderer aRenderer, Translator aRes) {
res = aRes;
renderer = aRenderer;
-
+
printAction = new Command(res.getString("Print"), "Print") {
public void doit() {print();}};
firstPageAction =
@@ -187,6 +186,8 @@
public void doit() {goToNextPage(null);}} );
menu.add(new Command(res.getString("Last page")) {
public void doit() {goToLastPage(null);}} );
+ menu.add(new Command(res.getString("Go to Page") + " ...") {
+ public void doit() {goToPage(null);}} );
menu.addSeparator();
subMenu = new JMenu(res.getString("Zoom"));
subMenu.add(new Command("25%") {
@@ -279,6 +280,24 @@
}
/**
+ * Shows a page by number.
+ */
+ private void goToPage(ActionEvent e) {
+
+ GoToPageDialog d = new GoToPageDialog(this, res.getString("Go to Page"), true);
+ d.setLocation((int) getLocation().getX() + 50, (int) getLocation().getY() + 50);
+ d.show();
+ currentPage = d.getPageNumber();
+
+ if (currentPage < 1 || currentPage > pageCount)
+ return;
+
+ currentPage--;
+
+ goToPage(currentPage);
+ }
+
+ /**
* Shows the first page.
*/
private void goToFirstPage(ActionEvent e) {
@@ -342,8 +361,11 @@
BufferedImage pageImage = null;
Graphics graphics = null;
+
renderer.render(currentPage);
pageImage = renderer.getLastRenderedPage();
+ if (pageImage == null)
+ return;
graphics = pageImage.getGraphics();
graphics.setColor(Color.black);
graphics.drawRect(0, 0, pageImage.getWidth() - 1,
@@ -352,11 +374,15 @@
previewImageLabel.setIcon(new ImageIcon(pageImage));
pageCount = renderer.getPageCount();
-
+
statisticsStatus.setText(res.getString("Page") + " " +
(currentPage + 1) + " " +
res.getString("of") + " " +
pageCount);
+ }
+
+ public void dispose() {
+ System.exit(0);
}
} // class PreviewDialog
1.2 +3 -4 xml-fop/src/org/apache/fop/viewer/PreviewDialogAboutBox.java
Index: PreviewDialogAboutBox.java
===================================================================
RCS file: /home/cvs/xml-fop/src/org/apache/fop/viewer/PreviewDialogAboutBox.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- PreviewDialogAboutBox.java 1999/11/25 19:21:11 1.1
+++ PreviewDialogAboutBox.java 2000/08/07 11:08:40 1.2
@@ -3,11 +3,10 @@
/*
originally contributed by
- Juergen Verwohlt: Juergen.Verwohlt@af-software.de,
- Rainer Steinkuhle: Rainer.Steinkuhle@af-software.de,
- Stanislav Gorkhover: Stanislav.Gorkhover@af-software.de
+ Juergen Verwohlt: Juergen.Verwohlt@jCatalog.com,
+ Rainer Steinkuhle: Rainer.Steinkuhle@jCatalog.com,
+ Stanislav Gorkhover: Stanislav.Gorkhover@jCatalog.com
*/
-
import java.awt.*;
1.2 +3 -4 xml-fop/src/org/apache/fop/viewer/ProgressListener.java
Index: ProgressListener.java
===================================================================
RCS file: /home/cvs/xml-fop/src/org/apache/fop/viewer/ProgressListener.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ProgressListener.java 2000/01/25 13:58:04 1.1
+++ ProgressListener.java 2000/08/07 11:08:40 1.2
@@ -2,11 +2,10 @@
/*
originally contributed by
- Juergen Verwohlt: Juergen.Verwohlt@af-software.de,
- Rainer Steinkuhle: Rainer.Steinkuhle@af-software.de,
- Stanislav Gorkhover: Stanislav.Gorkhover@af-software.de
+ Juergen Verwohlt: Juergen.Verwohlt@jCatalog.com,
+ Rainer Steinkuhle: Rainer.Steinkuhle@jCatalog.com,
+ Stanislav Gorkhover: Stanislav.Gorkhover@jCatalog.com
*/
-
public interface ProgressListener {
1.3 +1 -1 xml-fop/src/org/apache/fop/viewer/SecureResourceBundle.java
Index: SecureResourceBundle.java
===================================================================
RCS file: /home/cvs/xml-fop/src/org/apache/fop/viewer/SecureResourceBundle.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- SecureResourceBundle.java 2000/06/27 22:14:34 1.2
+++ SecureResourceBundle.java 2000/08/07 11:08:40 1.3
@@ -11,7 +11,7 @@
* <strong>Key <i>key</i> not found</strong> zur�ckgibt.
* @see PropertyResourceBundle
*
- * @author Stanislav.Gorkhover@af-software.de
+ * @author Stanislav.Gorkhover@jCatalog.com
* @version 1.0 18.03.1999
*/
public class SecureResourceBundle extends ResourceBundle implements Translator {
1.2 +1 -1 xml-fop/src/org/apache/fop/viewer/Translator.java
Index: Translator.java
===================================================================
RCS file: /home/cvs/xml-fop/src/org/apache/fop/viewer/Translator.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Translator.java 2000/01/25 13:58:04 1.1
+++ Translator.java 2000/08/07 11:08:40 1.2
@@ -5,7 +5,7 @@
* Definition f�r die �bersetzer-Klassen.
*
* @version 03.12.99
- * @author Stanislav.Gorkhover@af-software.de
+ * @author Stanislav.Gorkhover@jCatalog.com
*
*/
public interface Translator {
1.3 +3 -3 xml-fop/src/org/apache/fop/viewer/UserMessage.java
Index: UserMessage.java
===================================================================
RCS file: /home/cvs/xml-fop/src/org/apache/fop/viewer/UserMessage.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- UserMessage.java 2000/06/27 22:14:35 1.2
+++ UserMessage.java 2000/08/07 11:08:41 1.3
@@ -18,13 +18,13 @@
* @author S. Gorkhover
* @version 18.03.1999
*
- * @changed 23.04.99 Juergen.Verwohlt@af-software.de
+ * @changed 23.04.99 Juergen.Verwohlt@jCatalog.com
* @subject Weitere Ausgabemethoden: show(String, String) und show(String,String,Frame)
*
- * @changed 28.05.99 Juergen.Verwohlt@af-software.de
+ * @changed 28.05.99 Juergen.Verwohlt@jCatalog.com
* @subject MessageException unterst�tzen
*
- * @changed 09.06.99 Juergen.Verwohlt@af-software.de
+ * @changed 09.06.99 Juergen.Verwohlt@jCatalog.com
* @subject Neue Klasse MessagesException zur Anzeige verwenden
*/
public class UserMessage {
1.1 xml-fop/src/org/apache/fop/viewer/GoToPageDialog.java
Index: GoToPageDialog.java
===================================================================
/*
originally contributed by
Juergen Verwohlt: Juergen.Verwohlt@jCatalog.com,
Rainer Steinkuhle: Rainer.Steinkuhle@jCatalog.com,
Stanislav Gorkhover: Stanislav.Gorkhover@jCatalog.com
*/
package org.apache.fop.viewer;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import org.apache.fop.messaging.MessageHandler;
public class GoToPageDialog extends JDialog {
JPanel panel1 = new JPanel();
GridBagLayout gridBagLayout1 = new GridBagLayout();
JLabel pgNbLabel = new JLabel();
JTextField pgNbField = new JTextField();
JButton okButton = new JButton();
JButton cancelButton = new JButton();
int pageNumber = -1;
public GoToPageDialog(Frame frame, String title, boolean modal) {
super(frame, title, modal);
try {
jbInit();
pack();
}
catch(Exception ex) {
MessageHandler.errorln("GoToPageDialog: Konstruktor: " + ex.getMessage());
}
}
public GoToPageDialog() {
this(null, "", false);
}
void jbInit() throws Exception {
panel1.setLayout(gridBagLayout1);
pgNbLabel.setText("Page number");
okButton.setText("Ok");
okButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
okButton_actionPerformed(e);
}
});
cancelButton.setText("Cancel");
cancelButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
cancelButton_actionPerformed(e);
}
});
panel1.setMinimumSize(new Dimension(250, 78));
getContentPane().add(panel1);
panel1.add(pgNbLabel, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(10, 10, 10, 5), 0, 0));
panel1.add(pgNbField, new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0
,GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(10, 5, 10, 10), 0, 0));
panel1.add(okButton, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0
,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0, 0, 10, 5), 0, 0));
panel1.add(cancelButton, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0
,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 10, 10, 10), 0, 0));
}
void okButton_actionPerformed(ActionEvent e) {
try {
pageNumber = Integer.parseInt(pgNbField.getText());
dispose();
} catch (Exception ex) {
pgNbField.setText("???");
}
}
void cancelButton_actionPerformed(ActionEvent e) {
pageNumber = -1;
dispose();
}
public int getPageNumber() {
return pageNumber;
}
}
1.3 +45 -23 xml-fop/src/org/apache/fop/viewer/resources/resources.de
Index: resources.de
===================================================================
RCS file: /home/cvs/xml-fop/src/org/apache/fop/viewer/resources/resources.de,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- resources.de 2000/04/04 09:49:19 1.2
+++ resources.de 2000/08/07 11:08:49 1.3
@@ -1,23 +1,45 @@
-File=Datei
-Exit=Beenden
-View=Anzeige
-Previous page=Vorherige Seite
-Next page=N�chste Seite
-Last page=Letzte Seite
-Help=Hilfe
-Default zoom=Standardzoom
-Introduction=Einleitung
-About=�ber
-Show=Anzeigen
-Preview=Vorschau
-First page=Erste Seite
-Print=Drucken
-Page=Seite
-of=von
-Init parser=Initializiere Parser
-Init mappings=Initializiere Abbildung
-Build FO tree=Baue FO-Baum
-Layout FO tree=Formatiere FO-Baum
-Render=Gebe aus
-Close=Schlie�en
-
+File=Datei
+
+Exit=Beenden
+
+View=Anzeige
+
+Previous page=Vorherige Seite
+
+Next page=N�chste Seite
+
+Last page=Letzte Seite
+
+Help=Hilfe
+
+Default zoom=Standardzoom
+
+Introduction=Einleitung
+
+About=�ber
+
+Show=Anzeigen
+
+Preview=Vorschau
+
+First page=Erste Seite
+
+Print=Drucken
+
+Page=Seite
+
+of=von
+
+Init parser=Initializiere Parser
+
+Init mappings=Initializiere Abbildung
+
+Build FO tree=Baue FO-Baum
+
+Layout FO tree=Formatiere FO-Baum
+
+Render=Gebe aus
+
+Close=Schlie�en
+
+Go to Page=Gehe zur Seite
1.3 +38 -18 xml-fop/src/org/apache/fop/viewer/resources/resources.ru
<<Binary file>>