A link from page A to page B is only rendered in the pdf renderer correctly if page B
is prepared by the renderer before page A is rendered. In the following case page A is
rendered before page B is prepared (PN (X) is the pagenumber of page X):
(i) PN (A) < PN (B)
(ii) if there is a link from page A to page C then PN (C) <= PN (B)
Rainer Garus
diff -u -r xml-fop/src/org/apache/fop/area/AreaTree.java
xml-fop-new/src/org/apache/fop/area/AreaTree.java
--- xml-fop/src/org/apache/fop/area/AreaTree.java Mon Sep 16 12:28:22 2002
+++ xml-fop-new/src/org/apache/fop/area/AreaTree.java Fri Nov 1 22:26:22 2002
@@ -396,32 +396,19 @@
public void addPage(PageViewport page) {
super.addPage(page);
- // check prepared pages
- boolean cont = checkPreparedPages();
+ renderer.preparePage(page);
+ prepared.add(page);
- // if page finished
- if (cont && page.isResolved()) {
- try {
- renderer.renderPage(page);
- } catch (Exception e) {
- // use error handler to handle this FOP or IO Exception
- }
- page.clear();
- } else {
- preparePage(page);
- }
+ renderPreparedPages();
renderExtensions(pendingExt);
pendingExt.clear();
}
/**
- * Check prepared pages
- * @return true if the current page should be rendered
- * false if the renderer doesn't support out of order
- * rendering and there are pending pages
+ * Render resolved pending pages
*/
- protected boolean checkPreparedPages() {
+ protected void renderPreparedPages() {
for (Iterator iter = prepared.iterator(); iter.hasNext();) {
PageViewport p = (PageViewport)iter.next();
if (p.isResolved()) {
@@ -439,21 +426,8 @@
}
}
}
- return renderer.supportsOutOfOrder() || prepared.isEmpty();
}
- /**
- * Prepare a page.
- * An unresolved page can be prepared if the renderer supports
- * it and the page will be rendered later.
- * @param page the page to prepare
- */
- protected void preparePage(PageViewport page) {
- if (renderer.supportsOutOfOrder()) {
- renderer.preparePage(page);
- }
- prepared.add(page);
- }
/**
* Add an extension to this model.
@@ -490,7 +464,7 @@
*/
public void endDocument() {
// render any pages that had unresolved ids
- checkPreparedPages();
+ renderPreparedPages();
renderExtensions(endDocExt);
}
}
diff -u -r xml-fop/src/org/apache/fop/render/AbstractRenderer.java
xml-fop-new/src/org/apache/fop/render/AbstractRenderer.java
--- xml-fop/src/org/apache/fop/render/AbstractRenderer.java Thu Sep 19 00:26:00
2002
+++ xml-fop-new/src/org/apache/fop/render/AbstractRenderer.java Fri Nov 1 22:26:22
+2002
@@ -122,8 +122,7 @@
public void renderExtension(TreeExt ext) { }
/**
- * Prepare a page for rendering. This is called if the renderer supports
- * out of order rendering. The renderer should prepare the page so that a
+ * Prepare a page for rendering. The renderer should prepare the page so that a
* page further on in the set of pages can be rendered. The body of the
* page should not be rendered. The page will be rendered at a later time
* by the call to render page.
diff -u -r xml-fop/src/org/apache/fop/render/Renderer.java
xml-fop-new/src/org/apache/fop/render/Renderer.java
--- xml-fop/src/org/apache/fop/render/Renderer.java Mon Sep 9 18:25:37 2002
+++ xml-fop-new/src/org/apache/fop/render/Renderer.java Fri Nov 1 22:26:22 2002
@@ -113,8 +113,7 @@
void renderExtension(TreeExt ext);
/**
- * This is called if the renderer supports out of order rendering. The
- * renderer should prepare the page so that a page further on in the set of
+ * The renderer should prepare the page so that a page further on in the set of
* pages can be rendered. The body of the page should not be rendered. The
* page will be rendered at a later time by the call to {@link
* #renderPage(PageViewport)}.
<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master page-height="100mm" page-width="210mm" master-name="page">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence initial-page-number="1" master-reference="page">
<fo:flow flow-name="xsl-region-body">
<fo:block><fo:basic-link internal-destination="a">a, page <fo:page-number-citation
ref-id="a"/></fo:basic-link></fo:block>
<fo:block><fo:basic-link internal-destination="a">a, page <fo:page-number-citation
ref-id="a"/></fo:basic-link></fo:block>
<fo:block><fo:basic-link internal-destination="a">a, page <fo:page-number-citation
ref-id="a"/></fo:basic-link></fo:block>
<fo:block><fo:basic-link internal-destination="a">a, page <fo:page-number-citation
ref-id="a"/></fo:basic-link></fo:block>
<fo:block><fo:basic-link internal-destination="a">a, page <fo:page-number-citation
ref-id="a"/></fo:basic-link></fo:block>
<fo:block><fo:basic-link internal-destination="a">a, page <fo:page-number-citation
ref-id="a"/></fo:basic-link></fo:block>
<fo:block><fo:basic-link internal-destination="a">a, page <fo:page-number-citation
ref-id="a"/></fo:basic-link></fo:block>
<fo:block><fo:basic-link internal-destination="a">a, page <fo:page-number-citation
ref-id="a"/></fo:basic-link></fo:block>
<fo:block><fo:basic-link internal-destination="a">a, page <fo:page-number-citation
ref-id="a"/></fo:basic-link></fo:block>
<fo:block><fo:basic-link internal-destination="a">a, page <fo:page-number-citation
ref-id="a"/></fo:basic-link></fo:block>
<fo:block><fo:basic-link internal-destination="a">a, page <fo:page-number-citation
ref-id="a"/></fo:basic-link></fo:block>
<fo:block><fo:basic-link internal-destination="a">a, page <fo:page-number-citation
ref-id="a"/></fo:basic-link></fo:block>
<fo:block><fo:basic-link internal-destination="a">a, page <fo:page-number-citation
ref-id="a"/></fo:basic-link></fo:block>
<fo:block><fo:basic-link internal-destination="a">a, page <fo:page-number-citation
ref-id="a"/></fo:basic-link></fo:block>
<fo:block><fo:basic-link internal-destination="a">a, page <fo:page-number-citation
ref-id="a"/></fo:basic-link></fo:block>
<fo:block><fo:basic-link internal-destination="a">a, page <fo:page-number-citation
ref-id="a"/></fo:basic-link></fo:block>
<fo:block><fo:basic-link internal-destination="a">a, page <fo:page-number-citation
ref-id="a"/></fo:basic-link></fo:block>
<fo:block><fo:basic-link internal-destination="a">a, page <fo:page-number-citation
ref-id="a"/></fo:basic-link></fo:block>
<fo:block><fo:basic-link internal-destination="a">a, page <fo:page-number-citation
ref-id="a"/></fo:basic-link></fo:block>
<fo:block><fo:basic-link internal-destination="a">a, page <fo:page-number-citation
ref-id="a"/></fo:basic-link></fo:block>
<fo:block><fo:basic-link internal-destination="a">a, page <fo:page-number-citation
ref-id="a"/></fo:basic-link></fo:block>
<fo:block><fo:basic-link internal-destination="a">a, page <fo:page-number-citation
ref-id="a"/></fo:basic-link></fo:block>
<fo:block><fo:basic-link internal-destination="a">a, page <fo:page-number-citation
ref-id="a"/></fo:basic-link></fo:block>
<fo:block><fo:basic-link internal-destination="a">a, page <fo:page-number-citation
ref-id="a"/></fo:basic-link></fo:block>
<fo:block><fo:basic-link internal-destination="a">a, page <fo:page-number-citation
ref-id="a"/></fo:basic-link></fo:block>
<fo:block><fo:basic-link internal-destination="a">a, page <fo:page-number-citation
ref-id="a"/></fo:basic-link></fo:block>
<fo:block><fo:basic-link internal-destination="a">a, page <fo:page-number-citation
ref-id="a"/></fo:basic-link></fo:block>
<fo:block><fo:basic-link internal-destination="a">a, page <fo:page-number-citation
ref-id="a"/></fo:basic-link></fo:block>
<fo:block id="a">a</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]