-<?xml version="1.0" encoding="ISO-8859-1"?>
+<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
<link href="http://www.mulberrytech.com/xsl/xsl-list/">XSL list
archive</link> for how to perform these tasks.
</p>
- <p>
- If your text is not hyphenated at all and overflows the cell, please check
- if you've specified <code>keep-together="always"</code> on the table-cell
- or one of its parent elements. <code>keep-together="always"</code> implicitely
- also sets <code>keep-together.within-line="always"</code> which forbids FOP
- to break the text into multiple lines. This is important as FOP supports inline-level
- keeps since version 0.94. It's a good idea not to use the shorthand
- <code>keep-together="always"</code> at all!
- </p>
+ </answer>
+ </faq>
+ <faq id="table-cell-wrap">
+ <question>The contents of table cells don’t wrap</question>
+ <answer>
+ <p>You probably have <code>keep-together="always"</code> set on the table cell. See <link
+ href="#keep-together">next question</link>.</p>
+ </answer>
+ </faq>
+ <faq id="keep-together">
+ <question>FOP 0.95 and FOP 0.94 behave differently when <code>keep-together="always"</code>
+ is set on table cells</question>
+ <answer>
+ <p>Support for inline-level keeps has been added in FOP 0.95, and setting
+ <code>keep-together="always"</code> also implicitly sets
+ <code>keep-together.within-line="always"</code>, which forbids FOP
+ to break the text into multiple lines. Set
+ <code>keep-together.within-column="always"</code> on table-cell instead. It’s a good idea
+ not to use the shorthand <code>keep-together="always"</code> at all!</p>
</answer>
</faq>
<faq id="row-height-constraint">
<width>88</width>
<height>31</height>
</credit>
- <!--
<credit box-location="alt2">
- <name>ApacheCon Europe 2008</name>
+ <name>ApacheCon Europe 2009</name>
<url>http://eu.apachecon.com/</url>
- <image>http://apache.org/ads/ApacheCon/2008-europe-125x125.png</image>
+ <image>http://apache.org/ads/ApacheCon/2009-europe-125x125.png</image>
<width>125</width>
<height>125</height>
</credit>
- -->
<credit box-location="alt2">
- <name>ApacheCon US 2008</name>
+ <name>ApacheCon US 2009</name>
<url>http://us.apachecon.com/</url>
- <image>http://apache.org/ads/ApacheCon/2008-usa-125x125.png</image>
+ <image>http://apache.org/ads/ApacheCon/2009-usa-125x125.png</image>
<width>125</width>
<height>125</height>
</credit>
import java.io.IOException;
import java.io.OutputStream;
-import org.w3c.dom.Document;
-import org.w3c.dom.svg.SVGLength;
-
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.batik.bridge.BridgeContext;
import org.apache.batik.bridge.UnitProcessor;
import org.apache.batik.transcoder.TranscoderException;
import org.apache.batik.transcoder.TranscoderOutput;
import org.apache.batik.transcoder.image.ImageTranscoder;
-import org.apache.xmlgraphics.java2d.ps.AbstractPSDocumentGraphics2D;
-import org.apache.xmlgraphics.java2d.TextHandler;
-
import org.apache.fop.fonts.FontInfo;
import org.apache.fop.fonts.FontSetup;
import org.apache.fop.svg.AbstractFOPTranscoder;
+import org.apache.xmlgraphics.java2d.TextHandler;
+import org.apache.xmlgraphics.java2d.ps.AbstractPSDocumentGraphics2D;
+import org.apache.xmlgraphics.ps.PSGenerator;
+import org.w3c.dom.Document;
+import org.w3c.dom.svg.SVGLength;
/**
* This class enables to transcode an input to a PostScript document.
*/
public abstract class AbstractPSTranscoder extends AbstractFOPTranscoder {
- private Configuration cfg = null;
+ private final Configuration cfg = null;
protected AbstractPSDocumentGraphics2D graphics = null;
/**
FontInfo fontInfo = new FontInfo();
//TODO Do custom font configuration here somewhere/somehow
FontSetup.setup(fontInfo);
- graphics.setCustomTextHandler(new NativeTextHandler(graphics, fontInfo));
+ PSGenerator generator = graphics.getPSGenerator();
+ graphics.setCustomTextHandler(new NativeTextHandler(generator, fontInfo));
}
super.transcode(document, uri, output);
package org.apache.fop.render.ps;
+import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.geom.AffineTransform;
import java.io.IOException;
*/
public class NativeTextHandler implements PSTextHandler {
- private PSGraphics2D g2d;
+ private final PSGenerator gen;
/** FontInfo containing all available fonts */
protected FontInfo fontInfo;
* @param g2d the PSGraphics2D instance this instances is used by
* @param fontInfo the FontInfo object with all available fonts
*/
- public NativeTextHandler(PSGraphics2D g2d, FontInfo fontInfo) {
- this.g2d = g2d;
+ public NativeTextHandler(PSGenerator gen, FontInfo fontInfo) {
+ this.gen = gen;
if (fontInfo != null) {
this.fontInfo = fontInfo;
} else {
}
private PSGenerator getPSGenerator() {
- return this.g2d.getPSGenerator();
+ return this.gen;
}
/** {@inheritDoc} */
//nop
}
+ /** {@inheritDoc} */
+ public void drawString(String text, float x, float y) throws IOException {
+ // TODO Remove me after removing the deprecated method in TextHandler.
+ throw new UnsupportedOperationException("Deprecated method!");
+ }
+
/**
* Draw a string to the PostScript document. The text is painted using
* text operations.
* {@inheritDoc}
*/
- public void drawString(String s, float x, float y) throws IOException {
+ public void drawString(Graphics2D g, String s, float x, float y) throws IOException {
+ PSGraphics2D g2d = (PSGraphics2D)g;
g2d.preparePainting();
if (this.overrideFont == null) {
java.awt.Font awtFont = g2d.getFont();
import java.io.IOException;
import java.util.Map;
-import org.w3c.dom.Document;
-
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.batik.bridge.BridgeContext;
import org.apache.batik.bridge.GVTBuilder;
import org.apache.batik.gvt.GraphicsNode;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-
-import org.apache.xmlgraphics.java2d.ps.PSGraphics2D;
-import org.apache.xmlgraphics.ps.PSGenerator;
-
import org.apache.fop.fonts.FontInfo;
import org.apache.fop.render.AbstractGenericSVGHandler;
import org.apache.fop.render.Renderer;
import org.apache.fop.render.RendererContextConstants;
import org.apache.fop.svg.SVGEventProducer;
import org.apache.fop.svg.SVGUserAgent;
+import org.apache.xmlgraphics.java2d.ps.PSGraphics2D;
+import org.apache.xmlgraphics.ps.PSGenerator;
+import org.w3c.dom.Document;
/**
* PostScript XML handler for SVG. Uses Apache Batik for SVG processing.
NativeTextHandler nativeTextHandler = null;
BridgeContext ctx = new BridgeContext(ua);
if (!strokeText) {
- nativeTextHandler = new NativeTextHandler(graphics, psInfo.getFontInfo());
+ PSGenerator generator = graphics.getPSGenerator();
+ FontInfo fontInfo = psInfo.getFontInfo();
+ nativeTextHandler = new NativeTextHandler(generator, fontInfo);
graphics.setCustomTextHandler(nativeTextHandler);
PSTextPainter textPainter = new PSTextPainter(nativeTextHandler);
ctx.setTextPainter(textPainter);
float w = (float)ctx.getDocumentSize().getWidth() * 1000f;
float h = (float)ctx.getDocumentSize().getHeight() * 1000f;
- float sx = psInfo.getWidth() / (float)w;
- float sy = psInfo.getHeight() / (float)h;
+ float sx = psInfo.getWidth() / w;
+ float sy = psInfo.getHeight() / h;
ctx = null;
builder = null;