aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/org/apache/fop/render
diff options
context:
space:
mode:
Diffstat (limited to 'src/java/org/apache/fop/render')
-rw-r--r--src/java/org/apache/fop/render/AbstractRenderer.java29
-rw-r--r--src/java/org/apache/fop/render/Renderer.java16
-rw-r--r--src/java/org/apache/fop/render/pdf/PDFRenderer.java27
-rw-r--r--src/java/org/apache/fop/render/ps/PSRenderer.java6
-rw-r--r--src/java/org/apache/fop/render/xml/XMLRenderer.java17
5 files changed, 61 insertions, 34 deletions
diff --git a/src/java/org/apache/fop/render/AbstractRenderer.java b/src/java/org/apache/fop/render/AbstractRenderer.java
index c23f7ae8e..86820066f 100644
--- a/src/java/org/apache/fop/render/AbstractRenderer.java
+++ b/src/java/org/apache/fop/render/AbstractRenderer.java
@@ -25,32 +25,35 @@ import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
import java.io.IOException;
import java.io.OutputStream;
-import java.util.List;
import java.util.Iterator;
+import java.util.List;
import java.util.Set;
-// XML
import org.w3c.dom.Document;
-// FOP
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
import org.apache.fop.apps.FOPException;
+import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.area.Area;
import org.apache.fop.area.BeforeFloat;
import org.apache.fop.area.Block;
import org.apache.fop.area.BlockViewport;
import org.apache.fop.area.BodyRegion;
import org.apache.fop.area.CTM;
-import org.apache.fop.area.NormalFlow;
import org.apache.fop.area.Footnote;
import org.apache.fop.area.LineArea;
import org.apache.fop.area.MainReference;
-import org.apache.fop.area.Span;
+import org.apache.fop.area.NormalFlow;
+import org.apache.fop.area.OffDocumentItem;
import org.apache.fop.area.Page;
+import org.apache.fop.area.PageSequence;
import org.apache.fop.area.PageViewport;
-import org.apache.fop.area.RegionViewport;
import org.apache.fop.area.RegionReference;
+import org.apache.fop.area.RegionViewport;
+import org.apache.fop.area.Span;
import org.apache.fop.area.Trait;
-import org.apache.fop.area.OffDocumentItem;
import org.apache.fop.area.inline.Character;
import org.apache.fop.area.inline.Container;
import org.apache.fop.area.inline.ForeignObject;
@@ -60,15 +63,12 @@ import org.apache.fop.area.inline.InlineBlockParent;
import org.apache.fop.area.inline.InlineParent;
import org.apache.fop.area.inline.Leader;
import org.apache.fop.area.inline.Space;
-import org.apache.fop.area.inline.Viewport;
+import org.apache.fop.area.inline.SpaceArea;
import org.apache.fop.area.inline.TextArea;
+import org.apache.fop.area.inline.Viewport;
import org.apache.fop.area.inline.WordArea;
-import org.apache.fop.area.inline.SpaceArea;
-import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.fo.Constants;
import org.apache.fop.fonts.FontInfo;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
/**
* Abstract base class for all renderers. The Abstract renderer does all the
@@ -219,6 +219,11 @@ public abstract class AbstractRenderer
public void startPageSequence(LineArea seqTitle) {
//do nothing
}
+
+ /** {@inheritDoc} */
+ public void startPageSequence(PageSequence pageSequence) {
+ startPageSequence(pageSequence.getTitle());
+ }
// normally this would be overriden to create a page in the
// output
diff --git a/src/java/org/apache/fop/render/Renderer.java b/src/java/org/apache/fop/render/Renderer.java
index d54a61025..b40eec0cf 100644
--- a/src/java/org/apache/fop/render/Renderer.java
+++ b/src/java/org/apache/fop/render/Renderer.java
@@ -20,16 +20,16 @@
package org.apache.fop.render;
// Java
-import java.io.OutputStream;
import java.io.IOException;
+import java.io.OutputStream;
-// FOP
import org.apache.fop.apps.FOPException;
-import org.apache.fop.area.PageViewport;
+import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.area.LineArea;
import org.apache.fop.area.OffDocumentItem;
+import org.apache.fop.area.PageSequence;
+import org.apache.fop.area.PageViewport;
import org.apache.fop.fonts.FontInfo;
-import org.apache.fop.apps.FOUserAgent;
/**
@@ -142,10 +142,18 @@ public interface Renderer {
* Tells the renderer that a new page sequence starts.
*
* @param seqTitle The title of the page sequence
+ * @deprecated Use startPageSequence(PageSequence) instead
*/
void startPageSequence(LineArea seqTitle);
/**
+ * Tells the renderer that a new page sequence starts.
+ *
+ * @param pageSequence the page sequence
+ */
+ void startPageSequence(PageSequence pageSequence);
+
+ /**
* Tells the renderer to render a particular page. A renderer typically
* reponds by packing up the current page and writing it immediately to the
* output device.
diff --git a/src/java/org/apache/fop/render/pdf/PDFRenderer.java b/src/java/org/apache/fop/render/pdf/PDFRenderer.java
index 899bc1240..4d641517a 100644
--- a/src/java/org/apache/fop/render/pdf/PDFRenderer.java
+++ b/src/java/org/apache/fop/render/pdf/PDFRenderer.java
@@ -61,6 +61,7 @@ import org.apache.fop.area.DestinationData;
import org.apache.fop.area.LineArea;
import org.apache.fop.area.OffDocumentExtensionAttachment;
import org.apache.fop.area.OffDocumentItem;
+import org.apache.fop.area.PageSequence;
import org.apache.fop.area.PageViewport;
import org.apache.fop.area.RegionViewport;
import org.apache.fop.area.Trait;
@@ -611,7 +612,7 @@ public class PDFRenderer extends AbstractPathOrientedRenderer {
private void renderXMPMetadata(XMPMetadata metadata) {
Metadata docXMP = metadata.getMetadata();
- Metadata fopXMP = PDFMetadata.createXMPFromUserAgent(pdfDoc);
+ Metadata fopXMP = PDFMetadata.createXMPFromPDFDocument(pdfDoc);
//Merge FOP's own metadata into the one from the XSL-FO document
fopXMP.mergeInto(docXMP);
XMPBasicAdapter xmpBasic = XMPBasicSchema.getAdapter(docXMP);
@@ -679,13 +680,15 @@ public class PDFRenderer extends AbstractPathOrientedRenderer {
/**
* Start the next page sequence.
- * For the pdf renderer there is no concept of page sequences
+ * For the PDF renderer there is no concept of page sequences
* but it uses the first available page sequence title to set
- * as the title of the pdf document.
- *
- * @param seqTitle the title of the page sequence
+ * as the title of the PDF document, and the language of the
+ * document.
+ * @param pageSequence the page sequence
*/
- public void startPageSequence(LineArea seqTitle) {
+ public void startPageSequence(PageSequence pageSequence) {
+ super.startPageSequence(pageSequence);
+ LineArea seqTitle = pageSequence.getTitle();
if (seqTitle != null) {
String str = convertTitleToString(seqTitle);
PDFInfo info = this.pdfDoc.getInfo();
@@ -693,10 +696,20 @@ public class PDFRenderer extends AbstractPathOrientedRenderer {
info.setTitle(str);
}
}
+ if (pageSequence.getLanguage() != null) {
+ String lang = pageSequence.getLanguage();
+ String country = pageSequence.getCountry();
+ String langCode = lang + (country != null ? "-" + country : "");
+ if (pdfDoc.getRoot().getLanguage() == null) {
+ //Only set if not set already (first non-null is used)
+ //Note: No checking is performed whether the values are valid!
+ pdfDoc.getRoot().setLanguage(langCode);
+ }
+ }
if (pdfDoc.getRoot().getMetadata() == null) {
//If at this time no XMP metadata for the overall document has been set, create it
//from the PDFInfo object.
- Metadata xmp = PDFMetadata.createXMPFromUserAgent(pdfDoc);
+ Metadata xmp = PDFMetadata.createXMPFromPDFDocument(pdfDoc);
PDFMetadata pdfMetadata = pdfDoc.getFactory().makeMetadata(
xmp, true);
pdfDoc.getRoot().setMetadata(pdfMetadata);
diff --git a/src/java/org/apache/fop/render/ps/PSRenderer.java b/src/java/org/apache/fop/render/ps/PSRenderer.java
index 7e3ce87a2..ecd403749 100644
--- a/src/java/org/apache/fop/render/ps/PSRenderer.java
+++ b/src/java/org/apache/fop/render/ps/PSRenderer.java
@@ -72,7 +72,6 @@ import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.area.Area;
import org.apache.fop.area.BlockViewport;
import org.apache.fop.area.CTM;
-import org.apache.fop.area.LineArea;
import org.apache.fop.area.OffDocumentExtensionAttachment;
import org.apache.fop.area.OffDocumentItem;
import org.apache.fop.area.PageViewport;
@@ -1082,11 +1081,6 @@ public class PSRenderer extends AbstractPathOrientedRenderer
super.processOffDocumentItem(oDI);
}
- /** {@inheritDoc} */
- public void startPageSequence(LineArea seqTitle) {
- super.startPageSequence(seqTitle);
- }
-
/**
* Formats and writes a List of PSSetupCode instances to the output stream.
* @param setupCodeList a List of PSSetupCode instances
diff --git a/src/java/org/apache/fop/render/xml/XMLRenderer.java b/src/java/org/apache/fop/render/xml/XMLRenderer.java
index 213cba58d..66cce0ae1 100644
--- a/src/java/org/apache/fop/render/xml/XMLRenderer.java
+++ b/src/java/org/apache/fop/render/xml/XMLRenderer.java
@@ -61,6 +61,7 @@ import org.apache.fop.area.MainReference;
import org.apache.fop.area.NormalFlow;
import org.apache.fop.area.OffDocumentExtensionAttachment;
import org.apache.fop.area.OffDocumentItem;
+import org.apache.fop.area.PageSequence;
import org.apache.fop.area.PageViewport;
import org.apache.fop.area.RegionReference;
import org.apache.fop.area.RegionViewport;
@@ -585,14 +586,20 @@ public class XMLRenderer extends PrintRenderer {
handleExtensionAttachments(page.getExtensionAttachments());
}
- /**
- * {@inheritDoc}
- */
- public void startPageSequence(LineArea seqTitle) {
+ /** {@inheritDoc} */
+ public void startPageSequence(PageSequence pageSequence) {
handleDocumentExtensionAttachments();
endPageSequence(); // move this before handleDocumentExtensionAttachments() ?
startedSequence = true;
- startElement("pageSequence");
+ atts.clear();
+ if (pageSequence.getLanguage() != null) {
+ addAttribute("language", pageSequence.getLanguage());
+ }
+ if (pageSequence.getCountry() != null) {
+ addAttribute("country", pageSequence.getCountry());
+ }
+ startElement("pageSequence", atts);
+ LineArea seqTitle = pageSequence.getTitle();
if (seqTitle != null) {
startElement("title");
List children = seqTitle.getInlineAreas();