aboutsummaryrefslogtreecommitdiffstats
path: root/src/org
diff options
context:
space:
mode:
authorfotis <fotis@unknown>2000-08-07 11:08:49 +0000
committerfotis <fotis@unknown>2000-08-07 11:08:49 +0000
commitfdda8be07f25a1c51bbf7163e1c8de60fab752d7 (patch)
tree6a6e7dae5d8eac37638410dc3b21c71d4c57cb21 /src/org
parent337a90309c7691be009a27760fe42cdf897d0f5e (diff)
downloadxmlgraphics-fop-fdda8be07f25a1c51bbf7163e1c8de60fab752d7.tar.gz
xmlgraphics-fop-fdda8be07f25a1c51bbf7163e1c8de60fab752d7.zip
updates AWT viewer to new SVG support, implements a goto function for the user
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@193608 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/org')
-rw-r--r--src/org/apache/fop/apps/AWTCommandLine.java16
-rw-r--r--src/org/apache/fop/render/awt/AWTRenderer.java613
-rw-r--r--src/org/apache/fop/viewer/GoToPageDialog.java88
-rw-r--r--src/org/apache/fop/viewer/IconToolBar.java6
-rw-r--r--src/org/apache/fop/viewer/LoadableProperties.java2
-rw-r--r--src/org/apache/fop/viewer/MessageException.java2
-rw-r--r--src/org/apache/fop/viewer/MessagesDialog.java2
-rw-r--r--src/org/apache/fop/viewer/PreviewDialog.java38
-rw-r--r--src/org/apache/fop/viewer/PreviewDialogAboutBox.java7
-rw-r--r--src/org/apache/fop/viewer/ProgressListener.java7
-rw-r--r--src/org/apache/fop/viewer/SecureResourceBundle.java2
-rw-r--r--src/org/apache/fop/viewer/Translator.java2
-rw-r--r--src/org/apache/fop/viewer/UserMessage.java6
-rw-r--r--src/org/apache/fop/viewer/resources/resources.de22
-rw-r--r--src/org/apache/fop/viewer/resources/resources.ru20
15 files changed, 745 insertions, 88 deletions
diff --git a/src/org/apache/fop/apps/AWTCommandLine.java b/src/org/apache/fop/apps/AWTCommandLine.java
index de3c870e5..7a7236baa 100644
--- a/src/org/apache/fop/apps/AWTCommandLine.java
+++ b/src/org/apache/fop/apps/AWTCommandLine.java
@@ -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 @@ public class AWTCommandLine {
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 @@ public class AWTCommandLine {
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 @@ public class AWTCommandLine {
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 @@ public class AWTCommandLine {
driver.render();
frame.progress(resource.getString("Show"));
+ frame.showPage();
} catch (Exception e) {
MessageHandler.errorln("FATAL ERROR: " + e.getMessage());
@@ -167,7 +169,6 @@ public class AWTCommandLine {
* @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 @@ public class AWTCommandLine {
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];
@@ -229,3 +230,4 @@ public class AWTCommandLine {
} // main
} // AWTCommandLine
+
diff --git a/src/org/apache/fop/render/awt/AWTRenderer.java b/src/org/apache/fop/render/awt/AWTRenderer.java
index 3ee58664f..33ab073ef 100644
--- a/src/org/apache/fop/render/awt/AWTRenderer.java
+++ b/src/org/apache/fop/render/awt/AWTRenderer.java
@@ -4,9 +4,9 @@ package org.apache.fop.render.awt;
/*
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.image.*;
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 @@ public class AWTRenderer implements Renderer, Printable, Pageable {
*/
private BufferedImage pageImage = null;
private Graphics2D graphics = null;
-
+
/**
* The current (internal) font name
*/
@@ -92,6 +93,7 @@ public class AWTRenderer implements Renderer, Printable, Pageable {
*/
private int currentAreaContainerXPosition = 0;
+
static {
JAVA_FONT_NAMES = new Hashtable();
JAVA_FONT_NAMES.put("Times", "serif");
@@ -115,7 +117,7 @@ public class AWTRenderer implements Renderer, Printable, Pageable {
public void setScaleFactor(double newScaleFactor) {
scaleFactor = newScaleFactor;
- }
+ }
public double getScaleFactor() {
return scaleFactor;
@@ -140,6 +142,7 @@ public class AWTRenderer implements Renderer, Printable, Pageable {
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 @@ public class AWTRenderer implements Renderer, Printable, Pageable {
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 @@ public class AWTRenderer implements Renderer, Printable, Pageable {
}
/**
- * 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 @@ public class AWTRenderer implements Renderer, Printable, Pageable {
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;
@@ -254,13 +259,13 @@ public class AWTRenderer implements Renderer, Printable, Pageable {
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 @@ public class AWTRenderer implements Renderer, Printable, Pageable {
if (after != null) {
renderAreaContainer(after);
}
+
+ // SG: Wollen wir Links abbilden?
+ /*
+ if (page.hasLinks()) {
+ ....
+ }
+ */
}
public void renderAreaContainer(AreaContainer area) {
@@ -320,7 +332,7 @@ public class AWTRenderer implements Renderer, Printable, Pageable {
(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 @@ public class AWTRenderer implements Renderer, Printable, Pageable {
if (area instanceof BlockArea) {
rx += ((BlockArea)area).getStartIndent();
}
-
+
h = area.getContentHeight();
int ry = this.currentYPosition;
ColorType bg = area.getBackgroundColor();
@@ -461,9 +473,9 @@ public class AWTRenderer implements Renderer, Printable, Pageable {
try {
byte[] map = img.getBitmaps();
-
+
String path = img.getURL();
-
+
ImageIcon icon = new ImageIcon(path);
Image imgage = icon.getImage();
@@ -584,54 +596,32 @@ public class AWTRenderer implements Renderer, Printable, Pageable {
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 @@ public class AWTRenderer implements Renderer, Printable, Pageable {
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);
+ }
+
}
+
diff --git a/src/org/apache/fop/viewer/GoToPageDialog.java b/src/org/apache/fop/viewer/GoToPageDialog.java
new file mode 100644
index 000000000..c5b1f4198
--- /dev/null
+++ b/src/org/apache/fop/viewer/GoToPageDialog.java
@@ -0,0 +1,88 @@
+/*
+ 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;
+ }
+} \ No newline at end of file
diff --git a/src/org/apache/fop/viewer/IconToolBar.java b/src/org/apache/fop/viewer/IconToolBar.java
index 7b5a09e11..8704aec91 100644
--- a/src/org/apache/fop/viewer/IconToolBar.java
+++ b/src/org/apache/fop/viewer/IconToolBar.java
@@ -2,9 +2,9 @@ package org.apache.fop.viewer;
/*
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
*/
diff --git a/src/org/apache/fop/viewer/LoadableProperties.java b/src/org/apache/fop/viewer/LoadableProperties.java
index 9de062037..95010f25b 100644
--- a/src/org/apache/fop/viewer/LoadableProperties.java
+++ b/src/org/apache/fop/viewer/LoadableProperties.java
@@ -13,7 +13,7 @@ import java.util.*;
* 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 {
diff --git a/src/org/apache/fop/viewer/MessageException.java b/src/org/apache/fop/viewer/MessageException.java
index 6dd531fff..53da10fc3 100644
--- a/src/org/apache/fop/viewer/MessageException.java
+++ b/src/org/apache/fop/viewer/MessageException.java
@@ -9,7 +9,7 @@ import java.lang.Exception;
* 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
*
*/
diff --git a/src/org/apache/fop/viewer/MessagesDialog.java b/src/org/apache/fop/viewer/MessagesDialog.java
index c8c518dab..33b763b0c 100644
--- a/src/org/apache/fop/viewer/MessagesDialog.java
+++ b/src/org/apache/fop/viewer/MessagesDialog.java
@@ -18,7 +18,7 @@ import org.apache.fop.apps.*;
* 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 {
diff --git a/src/org/apache/fop/viewer/PreviewDialog.java b/src/org/apache/fop/viewer/PreviewDialog.java
index 178083b9c..8aeb7325c 100644
--- a/src/org/apache/fop/viewer/PreviewDialog.java
+++ b/src/org/apache/fop/viewer/PreviewDialog.java
@@ -2,12 +2,11 @@ package org.apache.fop.viewer;
/*
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 class PreviewDialog extends JFrame implements ProgressListener {
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 class PreviewDialog extends JFrame implements ProgressListener {
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 @@ public class PreviewDialog extends JFrame implements ProgressListener {
}
/**
+ * 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 @@ public class PreviewDialog extends JFrame implements ProgressListener {
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 @@ public class PreviewDialog extends JFrame implements ProgressListener {
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
diff --git a/src/org/apache/fop/viewer/PreviewDialogAboutBox.java b/src/org/apache/fop/viewer/PreviewDialogAboutBox.java
index 2d272203d..9aea565d6 100644
--- a/src/org/apache/fop/viewer/PreviewDialogAboutBox.java
+++ b/src/org/apache/fop/viewer/PreviewDialogAboutBox.java
@@ -3,13 +3,12 @@ package org.apache.fop.viewer;
/*
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.event.*;
import javax.swing.*;
diff --git a/src/org/apache/fop/viewer/ProgressListener.java b/src/org/apache/fop/viewer/ProgressListener.java
index 6f2c9ed9b..751838917 100644
--- a/src/org/apache/fop/viewer/ProgressListener.java
+++ b/src/org/apache/fop/viewer/ProgressListener.java
@@ -2,13 +2,12 @@ package org.apache.fop.viewer;
/*
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 {
public void progress(int percentage);
public void progress(String message);
diff --git a/src/org/apache/fop/viewer/SecureResourceBundle.java b/src/org/apache/fop/viewer/SecureResourceBundle.java
index 41c997183..3f68d6c16 100644
--- a/src/org/apache/fop/viewer/SecureResourceBundle.java
+++ b/src/org/apache/fop/viewer/SecureResourceBundle.java
@@ -11,7 +11,7 @@ import java.io.*;
* <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 {
diff --git a/src/org/apache/fop/viewer/Translator.java b/src/org/apache/fop/viewer/Translator.java
index e19e1f429..6c4da08f8 100644
--- a/src/org/apache/fop/viewer/Translator.java
+++ b/src/org/apache/fop/viewer/Translator.java
@@ -5,7 +5,7 @@ package org.apache.fop.viewer;
* Definition für die Übersetzer-Klassen.
*
* @version 03.12.99
- * @author Stanislav.Gorkhover@af-software.de
+ * @author Stanislav.Gorkhover@jCatalog.com
*
*/
public interface Translator {
diff --git a/src/org/apache/fop/viewer/UserMessage.java b/src/org/apache/fop/viewer/UserMessage.java
index 1cdda30d8..360cbb236 100644
--- a/src/org/apache/fop/viewer/UserMessage.java
+++ b/src/org/apache/fop/viewer/UserMessage.java
@@ -18,13 +18,13 @@ import javax.swing.JComponent.*;
* @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 {
diff --git a/src/org/apache/fop/viewer/resources/resources.de b/src/org/apache/fop/viewer/resources/resources.de
index 0a513ff8f..400a326ba 100644
--- a/src/org/apache/fop/viewer/resources/resources.de
+++ b/src/org/apache/fop/viewer/resources/resources.de
@@ -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
+Go to Page=Gehe zur Seite
diff --git a/src/org/apache/fop/viewer/resources/resources.ru b/src/org/apache/fop/viewer/resources/resources.ru
index e443d4621..84309253e 100644
--- a/src/org/apache/fop/viewer/resources/resources.ru
+++ b/src/org/apache/fop/viewer/resources/resources.ru
@@ -1,18 +1,38 @@
File=Ôàéë
+
Exit=Çàêîí÷èòü
+
View=Âèä
+
First page=Ïåðâàÿ ñòðàíèöà
+
Previous page=Ïðåäûäóùàÿ ñòðàíèöà
+
Next page=Ñëåäóþùàÿ ñòðàíèöà
+
Last page=Ïîñëåäíÿÿ ñòðàíèöà
+
+Go to Page=Èäòè ê ñòðàíèöå
+
Help=Ïîìîùü
+
Default zoom=Ñòàíäàðòíûé ìàñøòàá
+
Introduction=Ââåäåíèå
+
About=Î ïðîãðàììå
+
Show=Ïîêàç
+
Preview=Ïðîñìîòð
+
Print=Ïå÷àòàòü
+
Page=Ñòðàíèöà
+
of=èç
+
Zoom=Ìàñøòàá
+
Close=Çàêðûòü
+