Parcourir la source

Added AWT Viewer contributed by Albers+Frommberger (af-software.de)


git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@193244 13f79535-47bb-0310-9956-ffa450edef68
pull/42/head
jtauber il y a 24 ans
Parent
révision
45e9ffc347

+ 17
- 0
STATUS Voir le fichier

@@ -11,8 +11,25 @@ Get images working
[PARTIAL] Implement basic keeps
[DONE]Incorporate Eric Schaeffer's fix to tables in static-content
[DONE] Incorporate Kelly Campell's fixes to GifJpegImage
Incorporate Eric Schaeffer's further table fixes
Incorporate Eric Schaeffer's background colour implementation

Other Bugs to fix:

colour not continued onto subsequent pages if coloured block goes over page

Todo's and problems with AWT Previewer:

- currently the layout process uses PDF fonts. This gives sometimes
trouble with java.awt.Font
- we need some progress messages even if the process itself is fast
- GIF format is supported by the viewer, but disabled in FOP. BMP is
not done, because there are no standard libraries.
- more comments/english comments
- print output using AWT
- i18n for the user interface (yes, now we need this stuff)
- toolbar images directory is not configurable
- first preview is painted twice (flashing screen)
- should "preview" be an option when calling FOP instead of having
it's own main method?


+ 2
- 1
src/org/apache/fop/Makefile Voir le fichier

@@ -10,7 +10,8 @@ SUBDIRS=apps \
layout \
pdf \
render \
svg
svg \
viewer

all: $(CLASSES) allsubs


+ 171
- 0
src/org/apache/fop/apps/AWTCommandLine.java Voir le fichier

@@ -0,0 +1,171 @@

package org.apache.fop.apps;
/*
originally contributed by
Juergen Verwohlt: Juergen.Verwohlt@af-software.de,
Rainer Steinkuhle: Rainer.Steinkuhle@af-software.de,
Stanislav Gorkhover: Stanislav.Gorkhover@af-software.de
*/


import org.apache.fop.viewer.*;
import org.apache.fop.render.awt.*;

import javax.swing.UIManager;
import java.awt.*;

// SAX
import org.xml.sax.Parser;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;



// Java
import java.io.FileReader;
import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.net.URL;




/**
* initialize AWT previewer
*/

public class AWTCommandLine {


public AWTCommandLine(AWTRenderer aRenderer) {

PreviewDialog frame = new PreviewDialog(aRenderer);
frame.validate();

// center window
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();
if (frameSize.height > screenSize.height)
frameSize.height = screenSize.height;
if (frameSize.width > screenSize.width)
frameSize.width = screenSize.width;
frame.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
frame.setVisible(true);
}


static Parser createParser() {
String parserClassName =
System.getProperty("org.xml.sax.parser");
if (parserClassName == null) {
parserClassName = "com.jclark.xml.sax.Driver";
}
System.err.println("using SAX parser " + parserClassName);

try {
return (Parser)
Class.forName(parserClassName).newInstance();
} catch (ClassNotFoundException e) {
System.err.println("Could not find " + parserClassName);
} catch (InstantiationException e) {
System.err.println("Could not instantiate "
+ parserClassName);
} catch (IllegalAccessException e) {
System.err.println("Could not access " + parserClassName);
} catch (ClassCastException e) {
System.err.println(parserClassName + " is not a SAX driver");
}
return null;
}

/**
* create an InputSource from a file name
*
* @param filename the name of the file
* @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();
String fSep = System.getProperty("file.separator");
if (fSep != null && fSep.length() == 1)
path = path.replace(fSep.charAt(0), '/');
if (path.length() > 0 && path.charAt(0) != '/')
path = '/' + path;
try {
return new InputSource(new URL("file", null,
path).toString());
}
catch (java.net.MalformedURLException e) {
throw new Error("unexpected MalformedURLException");
}
}



/* main
*/
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(new javax.swing.plaf.metal.MetalLookAndFeel());
} catch (Exception e) {
e.printStackTrace();
}

String srcPath = null;

System.err.println(Version.getVersion());
if (args.length == 1) {
srcPath = args[0];
}
else {
System.err.println("usage: java " +
"AWTCommandLine " +
"formatting-object-file");

System.exit(1);
}


AWTRenderer renderer = new AWTRenderer();
new AWTCommandLine(renderer);

//init parser
Parser parser = createParser();

if (parser == null) {
System.err.println("ERROR: Unable to create SAX parser");
System.exit(1);
}

try {
Driver driver = new Driver();
driver.setRenderer(renderer);

// init mappings: time
driver.addElementMapping("org.apache.fop.fo.StandardElementMapping");
driver.addElementMapping("org.apache.fop.svg.SVGElementMapping");

// build FO tree: time
driver.buildFOTree(parser, fileInputSource(srcPath));

// layout FO tree: time
driver.format();

// render: time
driver.render();

} catch (Exception e) {
System.err.println("FATAL ERROR: " + e.getMessage());
System.exit(1);
}

} // main
} // AWTCommandLine


+ 2
- 1
src/org/apache/fop/apps/Makefile Voir le fichier

@@ -5,7 +5,8 @@ include $(BASEDIR)/Makefile.rules

SUBDIRS=

SOURCES=CommandLine.java \
SOURCES=AWTCommandLine.java \
CommandLine.java \
Driver.java \
ErrorHandler.java \
FOPException.java \

+ 2
- 1
src/org/apache/fop/render/Makefile Voir le fichier

@@ -3,7 +3,8 @@
BASEDIR:=../../../../..
include $(BASEDIR)/Makefile.rules

SUBDIRS=pdf \
SUBDIRS=awt \
pdf \
xml

SOURCES=Renderer.java

+ 453
- 0
src/org/apache/fop/render/awt/AWTRenderer.java Voir le fichier

@@ -0,0 +1,453 @@


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
*/

import org.apache.fop.layout.*;
import org.apache.fop.image.*;
import org.apache.fop.svg.*;
import org.apache.fop.render.pdf.*;
import org.apache.fop.viewer.*;


import java.awt.*;
import java.awt.image.*;
import java.awt.geom.*;
import java.awt.font.*;
import java.util.*;
import java.io.*;
import javax.swing.*;


public class AWTRenderer implements org.apache.fop.render.Renderer {

protected int pageWidth = 0;
protected int pageHeight = 0;
protected double scaleFactor = 100.0;
protected int pageNumber = 0;

protected Hashtable fontNames = new Hashtable();
protected Hashtable fontStyles = new Hashtable();




protected Graphics2D graphics = null;

protected DocumentPanel documentPanel = null;


/** the current (internal) font name */
protected String currentFontName;

/** the current font size in millipoints */
protected int currentFontSize;

/** the current colour's red component */
protected float currentRed = 0;

/** the current colour's green component */
protected float currentGreen = 0;

/** the current colour's blue component */
protected float currentBlue = 0;

/** the current vertical position in millipoints from bottom */
protected int currentYPosition = 0;

/** the current horizontal position in millipoints from left */
protected int currentXPosition = 0;

/** the horizontal position of the current area container */
private int currentAreaContainerXPosition = 0;


public AWTRenderer() {
}

public void setGraphics(Graphics2D g) {
graphics = g;
if (graphics != null) {
graphics = g;
graphics.setColor(Color.red);
}
}

public int getPageNumber() {
return pageNumber;
}

public void setPageNumber(int aValue) {
pageNumber = aValue;
if (documentPanel == null)
return;
documentPanel.updateSize(pageNumber, scaleFactor / 100.0);
}

public void setScaleFactor(double newScaleFactor) {
scaleFactor = newScaleFactor;
if (documentPanel == null)
return;
documentPanel.updateSize(pageNumber, scaleFactor / 100.0);
}


public double getScaleFactor() {
return scaleFactor;
}


/**
* Vor dem Druck einzustellen:
*
* Seite/Seiten wählen
* Zoomfaktor
* Seitenformat / Quer- oder Hoch
**/
public void transform(Graphics2D g2d, double zoomPercent, double angle) {
AffineTransform at = g2d.getTransform();
at.rotate(angle);
at.scale(zoomPercent/100.0, zoomPercent/100.0);
g2d.setTransform(at);
}

protected void drawFrame() {

int width = pageWidth;
int height = pageHeight;

graphics.setColor(Color.white);
graphics.fillRect(0, 0, width, height);
graphics.setColor(Color.black);
graphics.drawRect(-1, -1, width+2, height+2);
graphics.drawLine(width+2, 0, width+2, height+2);
graphics.drawLine(width+3, 1, width+3, height+3);

graphics.drawLine(0, height+2, width+2, height+2);
graphics.drawLine(1, height+3, width+3, height+3);

}


public void render(AreaTree areaTree, PrintWriter writer) throws IOException {
documentPanel.setAreaTree(areaTree);
documentPanel.setPageCount(areaTree.getPages().size());
documentPanel.updateSize(pageNumber, scaleFactor/100.0);
render(areaTree, 0);
}

public void render(AreaTree areaTree, int aPageNumber) throws IOException {
Page page = (Page)areaTree.getPages().elementAt(aPageNumber);

pageWidth = (int)((float)page.getWidth() / 1000f);
pageHeight = (int)((float)page.getHeight() / 1000f);

transform(graphics, scaleFactor, 0);
drawFrame();

renderPage(page);
}

public void renderPage(Page page) {
AreaContainer body, before, after;

body = page.getBody();
before = page.getBefore();
after = page.getAfter();

this.currentFontName = "";
this.currentFontSize = 0;

renderAreaContainer(body);

if (before != null) {
renderAreaContainer(before);
}

if (after != null) {
renderAreaContainer(after);
}

}


public void renderAreaContainer(AreaContainer area) {


this.currentYPosition = area.getYPosition();
this.currentAreaContainerXPosition = area.getXPosition();

Enumeration e = area.getChildren().elements();
while (e.hasMoreElements()) {
org.apache.fop.layout.Box b = (org.apache.fop.layout.Box) e.nextElement();
b.render(this);
}
}



protected Rectangle2D getBounds(org.apache.fop.layout.Area a) {
return new Rectangle2D.Double(currentAreaContainerXPosition,
currentYPosition,
a.getAllocationWidth(),
a.getHeight());
}

public void renderBlockArea(BlockArea area) {
int rx = this.currentAreaContainerXPosition
+ area.getStartIndent();
int ry = this.currentYPosition;
int w = area.getContentWidth();
int h = area.getHeight();
Enumeration e = area.getChildren().elements();
while (e.hasMoreElements()) {
org.apache.fop.layout.Box b = (org.apache.fop.layout.Box) e.nextElement();
b.render(this);
}
}


public void setupFontInfo(FontInfo fontInfo) {
FontSetup.setup(fontInfo);
Hashtable hash = fontInfo.getFonts();
org.apache.fop.render.pdf.Font f;
String name;
Object key;
int fontStyle;
for (Enumeration e = hash.keys(); e.hasMoreElements();) {
fontStyle = java.awt.Font.PLAIN;
key = e.nextElement();
f = (org.apache.fop.render.pdf.Font)hash.get(key);
name = f.fontName();

if (name.toUpperCase().indexOf("BOLD") > 0) {
fontStyle += java.awt.Font.BOLD;
}
if (name.toUpperCase().indexOf("ITALIC") > 0 ||
name.toUpperCase().indexOf("OBLIQUE") > 0) {
fontStyle += java.awt.Font.ITALIC;
}

int hyphenIndex = name.indexOf("-");

hyphenIndex = (hyphenIndex < 0) ? name.length() : hyphenIndex;
fontNames.put(key, name.substring(0, hyphenIndex));
fontStyles.put(key, new Integer(fontStyle));
}

}



public void renderDisplaySpace(DisplaySpace space) {
int d = space.getSize();
this.currentYPosition -= d;
}


public void renderImageArea(ImageArea area) {
int x = this.currentAreaContainerXPosition +
area.getXOffset();
int y = this.currentYPosition;
int w = area.getContentWidth();
int h = area.getHeight();


FopImage img = area.getImage();

if (img == null) {
System.out.println("area.getImage() is null");
}

int[] map = img.getimagemap();

String path = img.gethref();
// path = "c:/any.gif";

ImageIcon icon = new ImageIcon(path);

Image imgage = icon.getImage();

graphics.drawImage(imgage, currentXPosition / 1000,
pageHeight - y / 1000,
img.getWidth() / 1000,
img.getHeight() / 1000,
null);

currentYPosition -= h;


/* int xObjectNum = this.pdfDoc.addImage(img);

currentStream.add("ET\nq\n" + (img.getWidth()/1000f) + " 0 0 " +
(img.getHeight()/1000f) + " " +
((x + img.getX())/1000f) + " " +
(((y - h) - img.getY())/1000f) + " cm\n" +
"/Im" + xObjectNum + " Do\nQ\nBT\n");
*/
}




public void renderInlineArea(InlineArea area) {
char ch;
StringBuffer pdf = new StringBuffer();

String name = area.getFontState().getFontName();
int size = area.getFontState().getFontSize();

float red = area.getRed();
float green = area.getGreen();
float blue = area.getBlue();

if ((!name.equals(this.currentFontName))
|| (size != this.currentFontSize)) {
this.currentFontName = name;
this.currentFontSize = size;
}

if ((red != this.currentRed)
|| (green != this.currentGreen)
|| (blue != this.currentBlue)) {
this.currentRed = red;
this.currentGreen = green;
this.currentBlue = blue;
}

int rx = this.currentXPosition;
int bl = this.currentYPosition;


String s = area.getText();
Color oldColor = graphics.getColor();
java.awt.Font oldFont = graphics.getFont();
java.awt.Font f = new java.awt.Font(fontNames.get(name).toString(),
((Integer)fontStyles.get(name)).intValue(),
(int)(size / 1000f));


graphics.setColor(new Color(red, green, blue));

graphics.setFont(f);
graphics.drawString(s, rx / 1000f, (int)(pageHeight - bl / 1000f));
graphics.setFont(oldFont);
graphics.setColor(oldColor);


this.currentXPosition += area.getContentWidth();
}

public void renderInlineSpace(InlineSpace space) {
this.currentXPosition += space.getSize();
}


public void renderLineArea(LineArea area) {
int rx = this.currentAreaContainerXPosition
+ area.getStartIndent();
int ry = this.currentYPosition;
int w = area.getContentWidth();
int h = area.getHeight();

this.currentYPosition -= area.getPlacementOffset();
this.currentXPosition = rx;

int bl = this.currentYPosition;

Enumeration e = area.getChildren().elements();
while (e.hasMoreElements()) {
org.apache.fop.layout.Box b = (org.apache.fop.layout.Box) e.nextElement();
b.render(this);
}

this.currentYPosition = ry-h;
}

/**
* render rule area into PDF
*
* @param area area to render
*/
public void renderRuleArea(RuleArea area) {
int rx = this.currentAreaContainerXPosition
+ area.getStartIndent();
int ry = this.currentYPosition;
int w = area.getContentWidth();
int h = area.getHeight();
int th = area.getRuleThickness();
float r = area.getRed();
float g = area.getGreen();
float b = area.getBlue();


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);



}


public void renderSVGArea(SVGArea area) {
int x = this.currentAreaContainerXPosition;
int y = this.currentYPosition;
int w = area.getContentWidth();
int h = area.getHeight();
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");
}
} */
}


public void setProducer(String producer) {
// this.pdfDoc.setProducer(producer);
}


public void setComponent(DocumentPanel comp) {
documentPanel = comp;
}

}






+ 23
- 0
src/org/apache/fop/render/awt/Makefile Voir le fichier

@@ -0,0 +1,23 @@


BASEDIR:=../../../../../..
include $(BASEDIR)/Makefile.rules

SUBDIRS=

SOURCES=AWTRenderer.java

CLASSES=$(SOURCES:.java=.class)

all: $(CLASSES) allsubs

clean: cleanme cleansubs

cleanme:
rm -f *.class

$(TARGETS:%=%subs): %subs :
for dir in $(SUBDIRS) ; do \
(cd $$dir && pwd && $(MAKE) $(MFLAGS) $*) || exit 1 ; \
done


+ 62
- 0
src/org/apache/fop/viewer/Command.java Voir le fichier

@@ -0,0 +1,62 @@
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
*/

import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.ImageIcon;
import java.io.File;


/**
* Klasse für UI-Kommandos. Die Kommandos können in das Menüsystem oder
* in eine Toolbar eingefügt werden.<br>
* <code>Commands</code> unterstützen mehrsprachigkeit.<br>
* Durch überschreiben der Methode <code>doit<code> kann die Klasse customisiert werden.
* Über die Methode <code>undoit</code> kann Undo-Funktionalität unterstützt werden.<br>
*
* @author Juergen.Verwohlt@af-software.de
* @version 1.0 18.03.99
*/
public class Command extends AbstractAction {

public static final String IMAGE_DIR = "../viewer/images/";

public Command(String name) {
this(name, (ImageIcon)null);
}

public Command(String name, ImageIcon anIcon) {
super(name, anIcon);
}


public Command(String name, ImageIcon anIcon, String path) {
this(name, anIcon);
File f = new File (IMAGE_DIR + path + ".gif");
if (!f.exists()) {
System.err.println("Icon not found: " + f.getAbsolutePath());
}

}

public Command(String name, String iconName) {
this(name, new ImageIcon(IMAGE_DIR + iconName + ".gif"), iconName);
}

public void actionPerformed(ActionEvent e) {
doit();
}

public void doit() {
System.err.println("Not implemented.");
}

public void undoit() {
System.err.println("Not implemented.");
}
}

+ 91
- 0
src/org/apache/fop/viewer/DocumentPanel.java Voir le fichier

@@ -0,0 +1,91 @@
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
*/



import java.awt.*;
import javax.swing.*;


import org.apache.fop.layout.*;
import org.apache.fop.render.awt.*;


/**
* Diese Komponente stellt im Dialog das Dokument dar.
*/
public class DocumentPanel extends JComponent {
static final int V_BORDER = 80;
static final int H_BORDER = 70;

protected AWTRenderer renderer;
protected PreviewDialog previewDialog;
protected AreaTree areaTree;
protected int pageNumber = 0;

protected int docWidth;
protected int docHeight;
protected Color myColor = Color.lightGray;

public DocumentPanel(AWTRenderer aRenderer, PreviewDialog p) {
previewDialog = p;
renderer = aRenderer;
renderer.setComponent(this);
}

public void updateSize(int aPageNumber, double aFactor) {
if (areaTree == null)
return;

Page aPage = (Page)areaTree.getPages().elementAt(aPageNumber);
docWidth = aPage.getWidth() / 1000;
docHeight = aPage.getHeight() / 1000;
setSize((int)(aFactor * aPage.getWidth() / 1000.0 + 2*V_BORDER),
(int)(aFactor * aPage.getHeight()/ 1000.0 + 2*H_BORDER));
}

public void setAreaTree(AreaTree tree) {
areaTree = tree;
updateSize(pageNumber, 1.0);
getParent().getParent().doLayout();
}


public void paintComponent(Graphics g) {
Color ownColor = g.getColor();
g.setColor(myColor);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(ownColor);
g.translate(V_BORDER, H_BORDER);

renderer.setGraphics((Graphics2D)g);
if (areaTree != null) {
try {
renderer.render(areaTree, pageNumber);
} catch(Exception ex) {
ex.printStackTrace();
}
}
g.translate(-V_BORDER, -H_BORDER);
}

public void setPageNumber(int number) {
pageNumber = number;
}

public Dimension getPreferredSize() {
return getSize();
}

public void setPageCount(int pageCount) {
previewDialog.setPageCount(pageCount);
}

}


+ 35
- 0
src/org/apache/fop/viewer/IconToolBar.java Voir le fichier

@@ -0,0 +1,35 @@
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
*/


import javax.swing.*;
import java.beans.PropertyChangeListener;

public class IconToolBar extends JToolBar {

public JButton add(Action a) {
String name = (String) a.getValue(Action.NAME);
Icon icon = (Icon) a.getValue(Action.SMALL_ICON);
return add(a, name, icon);
}

public JButton add(Action a, String name, Icon icon) {
JButton b = new JButton(icon);
b.setToolTipText(name);
b.setEnabled(a.isEnabled());
b.addActionListener(a);
add(b);
PropertyChangeListener actionPropertyChangeListener =
createActionChangeListener(b);
a.addPropertyChangeListener(actionPropertyChangeListener);
return b;
}
}



BIN
src/org/apache/fop/viewer/Images/Print.gif Voir le fichier


BIN
src/org/apache/fop/viewer/Images/firstpg.gif Voir le fichier


BIN
src/org/apache/fop/viewer/Images/lastpg.gif Voir le fichier


BIN
src/org/apache/fop/viewer/Images/nextpg.gif Voir le fichier


BIN
src/org/apache/fop/viewer/Images/prevpg.gif Voir le fichier


+ 27
- 0
src/org/apache/fop/viewer/Makefile Voir le fichier

@@ -0,0 +1,27 @@


BASEDIR:=../../../../..
include $(BASEDIR)/Makefile.rules

SUBDIRS=

SOURCES=Command.java \
DocumentPanel.java \
IconToolBar.java \
PreviewDialog.java \
PreviewDialogAboutBox.java

CLASSES=$(SOURCES:.java=.class)

all: $(CLASSES) allsubs

clean: cleanme cleansubs

cleanme:
rm -f *.class

$(TARGETS:%=%subs): %subs :
for dir in $(SUBDIRS) ; do \
(cd $$dir && pwd && $(MAKE) $(MFLAGS) $*) || exit 1 ; \
done


+ 292
- 0
src/org/apache/fop/viewer/PreviewDialog.java Voir le fichier

@@ -0,0 +1,292 @@

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
*/


import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import java.beans.PropertyChangeListener;

import org.apache.fop.layout.*;
import org.apache.fop.render.awt.*;




/**
* Frame and User Interface for Preview
*/
public class PreviewDialog extends JFrame {


protected int currentPage = 0;
protected int pageCount = 0;

protected AWTRenderer renderer;

protected IconToolBar toolBar = new IconToolBar();

protected Command printAction = new Command("Print", "Print");// { public void doit() {}}
protected Command firstPageAction = new Command("First page", "firstpg") { public void doit() {goToFirstPage(null);}};
protected Command previousPageAction = new Command("Previous page", "prevpg") { public void doit() {goToPreviousPage(null);}};
protected Command nextPageAction = new Command("Next page", "nextpg") { public void doit() {goToNextPage(null);}};
protected Command lastPageAction = new Command("Last page", "lastpg") { public void doit() {goToLastPage(null);}};

protected JLabel zoomLabel = new JLabel(); //{public float getAlignmentY() { return 0.0f; }};
protected JComboBox scale = new JComboBox() {public float getAlignmentY() { return 0.5f; }};

protected JScrollPane previewArea = new JScrollPane();
protected JLabel statusBar = new JLabel();
protected DocumentPanel docPanel;




public PreviewDialog(AWTRenderer aRenderer) {
renderer = aRenderer;


setDefaultCloseOperation(DISPOSE_ON_CLOSE);
this.setSize(new Dimension(379, 476));
previewArea.setMinimumSize(new Dimension(50, 50));
statusBar.setText("");
statusBar.setBackground(new Color(0, 0, 231));
this.setTitle("FOP: AWT-Preview");

scale.addItem("25");
scale.addItem("50");
scale.addItem("75");
scale.addItem("100");
scale.addItem("150");
scale.addItem("200");

scale.setMaximumSize(new Dimension(80, 24));
scale.setPreferredSize(new Dimension(80, 24));

scale.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
scale_actionPerformed(e);
}
});

scale.setSelectedItem("100");
renderer.setScaleFactor(100.0);

zoomLabel.setText("Zoom");

this.setJMenuBar(setupMenue());

this.getContentPane().add(toolBar, BorderLayout.NORTH);
this.getContentPane().add(statusBar, BorderLayout.SOUTH);

toolBar.add(printAction);
toolBar.addSeparator();
toolBar.add(firstPageAction);
toolBar.add(previousPageAction);
toolBar.add(nextPageAction);
toolBar.add(lastPageAction);
toolBar.addSeparator();
toolBar.add(zoomLabel, null);
toolBar.addSeparator();
toolBar.add(scale, null);

this.getContentPane().add(previewArea, BorderLayout.CENTER);

docPanel = new DocumentPanel(renderer, this);


previewArea.setSize(docPanel.getSize());
previewArea.getViewport().add(docPanel);
statusBar.setText("FOTree --> AreaTree ...");

}


JMenuBar setupMenue() {
JMenuBar menuBar;
JMenuItem menuItem;
JMenu menu;
JMenu subMenu;

menuBar = new JMenuBar();
menu = new JMenu("File");
subMenu = new JMenu("OutputFormat");
subMenu.add(new Command("mHTML"));
subMenu.add(new Command("mPDF"));
subMenu.add(new Command("mRTF"));
subMenu.add(new Command("mTEXT"));
// menu.add(subMenu);
// menu.addSeparator();
menu.add(new Command("Print"));
menu.addSeparator();
menu.add(new Command("Exit") { public void doit() {dispose();}} );
menuBar.add(menu);
menu = new JMenu("View");
menu.add(new Command("First page") { public void doit() {goToFirstPage(null);}} );
menu.add(new Command("Previous page") { public void doit() {goToPreviousPage(null);}} );
menu.add(new Command("Next page") { public void doit() {goToNextPage(null);}} );
menu.add(new Command("Last page") { public void doit() {goToLastPage(null);}} );
menu.addSeparator();
subMenu = new JMenu("Zoom");
subMenu.add(new Command("25%") { public void doit() {setScale(25.0);}} );
subMenu.add(new Command("50%") { public void doit() {setScale(50.0);}} );
subMenu.add(new Command("75%") { public void doit() {setScale(75.0);}} );
subMenu.add(new Command("100%") { public void doit() {setScale(100.0);}} );
subMenu.add(new Command("150%") { public void doit() {setScale(150.0);}} );
subMenu.add(new Command("200%") { public void doit() {setScale(200.0);}} );
menu.add(subMenu);
menu.addSeparator();
menu.add(new Command("Default zoom") { public void doit() {setScale(100.0);}} );
menuBar.add(menu);
menu = new JMenu("Help");
menu.add(new Command("Index"));
menu.addSeparator();
menu.add(new Command("Introduction"));
menu.addSeparator();
menu.add(new Command("About"){ public void doit() {startHelpAbout(null);}} );
menuBar.add(menu);
return menuBar;
}


public void dispose() {
System.exit(0);
}


//Aktion Hilfe | Info durchgeführt

public void startHelpAbout(ActionEvent e) {
PreviewDialogAboutBox dlg = new PreviewDialogAboutBox(this);
Dimension dlgSize = dlg.getPreferredSize();
Dimension frmSize = getSize();
Point loc = getLocation();
dlg.setLocation((frmSize.width - dlgSize.width) / 2 + loc.x, (frmSize.height - dlgSize.height) / 2 + loc.y);
dlg.setModal(true);
dlg.show();
}

void goToPage(int number) {
docPanel.setPageNumber(number);
repaint();
previewArea.repaint();
statusBar.setText("Page " + (number + 1) + " of " + pageCount);
}

/**
* Shows the previous page.
*/
void goToPreviousPage(ActionEvent e) {
if (currentPage <= 0)
return;
currentPage--;
goToPage(currentPage);
}


/**
* Shows the next page.
*/
void goToNextPage(ActionEvent e) {
if (currentPage >= pageCount - 1)
return;
currentPage++;
goToPage(currentPage);
}

/**
* Shows the last page.
*/
void goToLastPage(ActionEvent e) {

if (currentPage == pageCount - 1) return;
currentPage = pageCount - 1;

goToPage(currentPage);
}

/**
* Shows the first page.
*/
void goToFirstPage(ActionEvent e) {
if (currentPage == 0)
return;
currentPage = 0;
goToPage(currentPage);
}

void print(ActionEvent e) {
Properties p = null;

Container parent = this.getRootPane();
while ( !( parent instanceof Frame )) parent = parent.getParent();
Frame f = (Frame)parent;

PrintJob pj = f.getToolkit().getPrintJob(f, getTitle(), p);
if(pj == null) return;
Graphics pg = pj.getGraphics();
if (pg != null) {
docPanel.paintAll(pg);
pg.dispose();
}
pj.end();
}

public void setScale(double scaleFactor) {

if (scaleFactor == 25.0)
scale.setSelectedIndex(0);
else if (scaleFactor == 50.0)
scale.setSelectedIndex(1);
else if (scaleFactor == 75.0)
scale.setSelectedIndex(2);
else if (scaleFactor == 100.0)
scale.setSelectedIndex(3);
else if (scaleFactor == 150.0)
scale.setSelectedIndex(4);
else if (scaleFactor == 200.0)
scale.setSelectedIndex(5);

renderer.setScaleFactor(scaleFactor);
previewArea.invalidate();
previewArea.repaint();
}

void scale_actionPerformed(ActionEvent e) {
setScale(new Double((String)scale.getSelectedItem()).doubleValue());
}


public void setPageCount(int aPageCount) {
pageCount = aPageCount;
statusBar.setText("Page 1 of " + pageCount);
}

} // class PreviewDialog




















+ 99
- 0
src/org/apache/fop/viewer/PreviewDialogAboutBox.java Voir le fichier

@@ -0,0 +1,99 @@

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
*/



import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;

import org.apache.fop.apps.Version;



public class PreviewDialogAboutBox extends Dialog implements ActionListener {

JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JPanel insetsPanel1 = new JPanel();
JPanel insetsPanel2 = new JPanel();
JPanel insetsPanel3 = new JPanel();
JButton button1 = new JButton();
JLabel imageControl1 = new JLabel();
ImageIcon imageIcon;
JLabel label1 = new JLabel();
JLabel label2 = new JLabel();
JLabel label3 = new JLabel();
JLabel label4 = new JLabel();
BorderLayout borderLayout1 = new BorderLayout();
BorderLayout borderLayout2 = new BorderLayout();
FlowLayout flowLayout1 = new FlowLayout();
FlowLayout flowLayout2 = new FlowLayout();
GridLayout gridLayout1 = new GridLayout();
String product = "FOP AWT-Preview";
String version = "Version: " + Version.getVersion();
String copyright = "See xml.apache.org";
String comments = "";//"Print Preview";

public PreviewDialogAboutBox(Frame parent) {
super(parent);
enableEvents(AWTEvent.WINDOW_EVENT_MASK);

//imageIcon = new ImageIcon(getClass().getResource("Hier der Grafikname"));
this.setTitle("Info");
setResizable(false);
panel1.setLayout(borderLayout1);
panel2.setLayout(borderLayout2);
insetsPanel1.setLayout(flowLayout1);
insetsPanel2.setLayout(flowLayout1);
insetsPanel2.setBorder(new EmptyBorder(10, 10, 10, 10));
gridLayout1.setRows(4);
gridLayout1.setColumns(1);
label1.setText(product);
label2.setText(version);
label3.setText(copyright);
label4.setText(comments);
insetsPanel3.setLayout(gridLayout1);
insetsPanel3.setBorder(new EmptyBorder(10, 60, 10, 10));
button1.setText("OK");
button1.addActionListener(this);
insetsPanel2.add(imageControl1, null);
panel2.add(insetsPanel2, BorderLayout.WEST);
this.add(panel1, null);
insetsPanel3.add(label1, null);
insetsPanel3.add(label2, null);
insetsPanel3.add(label3, null);
insetsPanel3.add(label4, null);
panel2.add(insetsPanel3, BorderLayout.CENTER);
insetsPanel1.add(button1, null);
panel1.add(insetsPanel1, BorderLayout.SOUTH);
panel1.add(panel2, BorderLayout.NORTH);
pack();
}

protected void processWindowEvent(WindowEvent e) {
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
cancel();
}
super.processWindowEvent(e);
}

void cancel() {
dispose();
}

public void actionPerformed(ActionEvent e) {
if (e.getSource() == button1) {
cancel();
}
}
}


Chargement…
Annuler
Enregistrer