</fo:layout-master-set>
<fo:bookmark-tree>
- <fox:outline internal-destination="sec0">
+ <fo:bookmark internal-destination="sec0">
<fox:label>Adding Fonts to FOP</fox:label>
- </fox:outline>
+ </fo:bookmark>
- <fox:outline internal-destination="sec1">
+ <fo:bookmark internal-destination="sec1">
<fox:label>Adding additional Type 1 fonts</fox:label>
- <fox:outline internal-destination="sec1-1">
+ <fo:bookmark internal-destination="sec1-1">
<fox:label>Generating a font metrics file</fox:label>
- </fox:outline>
- <fox:outline internal-destination="sec1-2">
+ </fo:bookmark>
+ <fo:bookmark internal-destination="sec1-2">
<fox:label>Register the fonts within FOP</fox:label>
- </fox:outline>
- </fox:outline>
+ </fo:bookmark>
+ </fo:bookmark>
- <fox:outline internal-destination="sec2">
+ <fo:bookmark internal-destination="sec2">
<fox:label>Adding additional TrueType fonts</fox:label>
- <fox:outline internal-destination="sec2-1">
+ <fo:bookmark internal-destination="sec2-1">
<fox:label>Generating a font metrics file</fox:label>
- </fox:outline>
- <fox:outline internal-destination="sec2-2">
+ </fo:bookmark>
+ <fo:bookmark internal-destination="sec2-2">
<fox:label>TrueType collections</fox:label>
- </fox:outline>
- <fox:outline internal-destination="sec2-3">
+ </fo:bookmark>
+ <fo:bookmark internal-destination="sec2-3">
<fox:label>Register the fonts within FOP</fox:label>
- </fox:outline>
+ </fo:bookmark>
- </fox:outline>
+ </fo:bookmark>
- <fox:outline internal-destination="sec3">
+ <fo:bookmark internal-destination="sec3">
<fox:label>Embedding fonts in the PDF</fox:label>
- </fox:outline>
+ </fo:bookmark>
- <fox:outline internal-destination="sec4">
+ <fo:bookmark internal-destination="sec4">
<fox:label>Example embedding MSGothic</fox:label>
- <fox:outline internal-destination="sec4-1">
+ <fo:bookmark internal-destination="sec4-1">
<fox:label>Setup CLASSPATH</fox:label>
- </fox:outline>
+ </fo:bookmark>
- <fox:outline internal-destination="sec4-2">
+ <fo:bookmark internal-destination="sec4-2">
<fox:label>Create the metrics file</fox:label>
- </fox:outline>
+ </fo:bookmark>
- <fox:outline internal-destination="sec4-3">
+ <fo:bookmark internal-destination="sec4-3">
<fox:label>Edit msgothic.xml</fox:label>
- </fox:outline>
+ </fo:bookmark>
- <fox:outline internal-destination="sec4-4">
+ <fo:bookmark internal-destination="sec4-4">
<fox:label>Register the font with FOP</fox:label>
- </fox:outline>
- </fox:outline>
+ </fo:bookmark>
+ </fo:bookmark>
- <fox:outline internal-destination="sec5">
+ <fo:bookmark internal-destination="sec5">
<fox:label>Japanese Examples</fox:label>
- </fox:outline>
+ </fo:bookmark>
</fo:bookmark-tree>
<fo:page-sequence master-reference="A4">
<!-- bookmark section -->
<fo:bookmark-tree>
- <fox:outline internal-destination="sec1">
+ <fo:bookmark internal-destination="sec1">
<fox:label>What is FOP?</fox:label>
- </fox:outline>
+ </fo:bookmark>
- <fox:outline internal-destination="sec2">
+ <fo:bookmark internal-destination="sec2">
<fox:label>Downloading FOP</fox:label>
- </fox:outline>
+ </fo:bookmark>
- <fox:outline internal-destination="sec3">
+ <fo:bookmark internal-destination="sec3">
<fox:label>Running FOP</fox:label>
- <fox:outline internal-destination="sec3-1">
+ <fo:bookmark internal-destination="sec3-1">
<fox:label>Prerequisites</fox:label>
- <fox:outline internal-destination="sec3-1-1">
+ <fo:bookmark internal-destination="sec3-1-1">
<fox:label>Java 1.1</fox:label>
- </fox:outline>
+ </fo:bookmark>
- <fox:outline internal-destination="sec3-1-2">
+ <fo:bookmark internal-destination="sec3-1-2">
<fox:label>XML Parser</fox:label>
- </fox:outline>
+ </fo:bookmark>
- <fox:outline internal-destination="sec3-1-3">
+ <fo:bookmark internal-destination="sec3-1-3">
<fox:label>XSLT Processor</fox:label>
- </fox:outline>
+ </fo:bookmark>
- </fox:outline>
+ </fo:bookmark>
- <fox:outline internal-destination="sec3-2">
+ <fo:bookmark internal-destination="sec3-2">
<fox:label>Starting FOP</fox:label>
- </fox:outline>
+ </fo:bookmark>
- </fox:outline>
+ </fo:bookmark>
- <fox:outline internal-destination="sec4">
+ <fo:bookmark internal-destination="sec4">
<fox:label>Embedding FOP</fox:label>
- </fox:outline>
+ </fo:bookmark>
- <fox:outline internal-destination="sec5">
+ <fo:bookmark internal-destination="sec5">
<fox:label>What's Implemented?</fox:label>
- </fox:outline>
- <fox:outline internal-destination="sec6">
+ </fo:bookmark>
+ <fo:bookmark internal-destination="sec6">
<fox:label>Limitations</fox:label>
- </fox:outline>
- <fox:outline internal-destination="sec7">
+ </fo:bookmark>
+ <fo:bookmark internal-destination="sec7">
<fox:label>Bugs</fox:label>
- </fox:outline>
- <fox:outline internal-destination="sec8">
+ </fo:bookmark>
+ <fo:bookmark internal-destination="sec8">
<fox:label>Compiling FOP</fox:label>
- </fox:outline>
- <fox:outline internal-destination="sec9">
+ </fo:bookmark>
+ <fo:bookmark internal-destination="sec9">
<fox:label>Getting Involved</fox:label>
- </fox:outline>
- <fox:outline internal-destination="sec10">
+ </fo:bookmark>
+ <fo:bookmark internal-destination="sec10">
<fox:label>FOP Relevant Specifications</fox:label>
- </fox:outline>
- <fox:outline internal-destination="sec11">
+ </fo:bookmark>
+ <fo:bookmark internal-destination="sec11">
<fox:label>License</fox:label>
- </fox:outline>
+ </fo:bookmark>
</fo:bookmark-tree>
<!-- actual layout -->
import java.util.HashMap;
import org.apache.fop.fo.pagination.bookmarks.BookmarkTree;
-import org.apache.fop.fo.extensions.Outline;
+import org.apache.fop.fo.pagination.bookmarks.Bookmark;
/**
* An instance of this class is either a PDF bookmark-tree and
public class BookmarkData extends OffDocumentItem implements Resolvable {
private ArrayList subData = new ArrayList();
- // bookmark label
- private String label = null;
+ // bookmark-title for this bookmark
+ private String bookmarkTitle = null;
// ID Reference for this bookmark
private String idRef;
whenToProcess = END_OF_DOC;
for (int count = 0; count < bookmarkTree.getBookmarks().size(); count++) {
- Outline out = (Outline)(bookmarkTree.getBookmarks()).get(count);
- addSubData(createBookmarkData(out));
+ Bookmark bkmk = (Bookmark)(bookmarkTree.getBookmarks()).get(count);
+ addSubData(createBookmarkData(bkmk));
}
}
}
/**
- * Set the label for this bookmark.
+ * Set the title for this bookmark.
*
- * @param l the string label
+ * @param title the bookmark title
*/
- public void setLabel(String l) {
- label = l;
+ public void setBookmarkTitle(String title) {
+ bookmarkTitle = title;
}
/**
- * Get the label for this bookmark object.
+ * Get the title for this bookmark object.
*
- * @return the label string
+ * @return the bookmark title
*/
- public String getLabel() {
- return label;
+ public String getBookmarkTitle() {
+ return bookmarkTitle;
}
/**
}
/**
- * Create and return the bookmark data for this outline.
+ * Create and return the bookmark data for this bookmark
* This creates a bookmark data with the destination
- * and adds all the data from child outlines.
+ * and adds all the data from child bookmarks
*
- * @param outline the Outline object for which a bookmark entry should be
+ * @param bookmark the Bookmark object for which a bookmark entry should be
* created
* @return the new bookmark data
*/
- private BookmarkData createBookmarkData(Outline outline) {
- BookmarkData data = new BookmarkData(outline.getInternalDestination());
- data.setLabel(outline.getLabel());
- for (int count = 0; count < outline.getOutlines().size(); count++) {
- Outline out = (Outline)(outline.getOutlines()).get(count);
- data.addSubData(createBookmarkData(out));
+ private BookmarkData createBookmarkData(Bookmark bookmark) {
+ BookmarkData data = new BookmarkData(bookmark.getInternalDestination());
+ data.setBookmarkTitle(bookmark.getBookmarkTitle());
+ for (int count = 0; count < bookmark.getChildBookmarks().size(); count++) {
+ Bookmark bkmk = (Bookmark)(bookmark.getChildBookmarks()).get(count);
+ data.addSubData(createBookmarkData(bkmk));
}
return data;
}
int FO_TITLE = 55;
int FO_WRAPPER = 56;
int FO_BOOKMARK_TREE = 57;
- int FRM_OBJ_COUNT = 57;
+ int FO_BOOKMARK = 58;
+ int FRM_OBJ_COUNT = 58;
// Masks
int COMPOUND_SHIFT = 9;
foObjs.put("declarations", new DeclarationsMaker());
foObjs.put("color-profile", new ColorProfileMaker());
foObjs.put("bookmark-tree", new BookmarkTreeMaker());
+ foObjs.put("bookmark", new BookmarkMaker());
foObjs.put("page-sequence", new PageSequenceMaker());
foObjs.put("layout-master-set", new LayoutMasterSetMaker());
foObjs.put("page-sequence-master",
}
}
+ static class BookmarkMaker extends ElementMapping.Maker {
+ public FONode make(FONode parent) {
+ return new org.apache.fop.fo.pagination.bookmarks.Bookmark(parent);
+ }
+ }
+
static class PageSequenceMaker extends ElementMapping.Maker {
public FONode make(FONode parent) {
return new org.apache.fop.fo.pagination.PageSequence(parent);
elem.addProperty(Constants.PR_RENDERING_INTENT);
elem = elements[Constants.FO_BOOKMARK_TREE];
-// elem.addContent(Constants.FO_BOOKMARK);
+ elem.addContent(Constants.FO_BOOKMARK);
+
+ elem = elements[Constants.FO_BOOKMARK];
+// elem.addContent(Constants.FO_BOOKMARK_TITLE);
+ elem.addContent(Constants.FO_BOOKMARK);
+ elem.addProperties(CommonAccessibilityProperties);
+ elem.addProperty(Constants.PR_EXTERNAL_DESTINATION);
+ elem.addProperty(Constants.PR_INTERNAL_DESTINATION);
+ elem.addProperty(Constants.PR_STARTING_STATE);
elem = elements[Constants.FO_PAGE_SEQUENCE];
elem.addProperty(Constants.PR_COUNTRY);
protected void initialize() {
if (foObjs == null) {
foObjs = new HashMap();
- foObjs.put("outline", new O());
foObjs.put("label", new L());
}
}
- static class O extends ElementMapping.Maker {
- public FONode make(FONode parent) {
- return new Outline(parent);
- }
- }
-
static class L extends ElementMapping.Maker {
public FONode make(FONode parent) {
return new Label(parent);
+++ /dev/null
-/*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* $Id$ */
-
-package org.apache.fop.fo.extensions;
-
-import java.util.ArrayList;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.Locator;
-
-import org.apache.fop.apps.FOPException;
-import org.apache.fop.fo.FONode;
-import org.apache.fop.fo.PropertyList;
-
-
-/**
- * The outline object for the pdf bookmark extension.
- * The outline element contains a label and optionally more outlines.
- */
-public class Outline extends ExtensionObj {
- private Label label;
- private ArrayList outlines = new ArrayList();
-
- private String internalDestination;
- private String externalDestination;
-
- /**
- * Create a new outline object.
- *
- * @param parent the parent fo node
- */
- public Outline(FONode parent) {
- super(parent);
- }
-
- /**
- * The attributes on the outline object are the internal and external
- * destination. One of these is required.
- *
- * @see org.apache.fop.fo.FObj#processNode
- */
- public void processNode(String elementName, Locator locator,
- Attributes attlist, PropertyList propertyList) throws FOPException
- {
- internalDestination =
- attlist.getValue("internal-destination");
- externalDestination =
- attlist.getValue("external-destination");
- if (externalDestination != null && !externalDestination.equals("")) {
- getLogger().warn("fox:outline external-destination not supported currently.");
- }
-
- if (internalDestination == null || internalDestination.equals("")) {
- getLogger().warn("fox:outline requires an internal-destination.");
- }
-
- }
-
- /**
- * @see org.apache.fop.fo.FONode#addChildNode(FONode)
- */
- protected void addChildNode(FONode obj) {
- if (obj instanceof Label) {
- label = (Label)obj;
- } else if (obj instanceof Outline) {
- outlines.add(obj);
- }
- }
-
- /**
- * Get the label string.
- * This gets the label string from the child label element.
- *
- * @return the label string or empty if not found
- */
- public String getLabel() {
- return label == null ? "" : label.toString();
- }
-
- public String getInternalDestination() {
- return internalDestination;
- }
-
- public String getExternalDestination() {
- return externalDestination;
- }
-
- public ArrayList getOutlines() {
- return outlines;
- }
-
- public String getName() {
- return "(http://xml.apache.org/fop/extensions) outline";
- }
-}
--- /dev/null
+/*
+ * Copyright 1999-2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id $ */
+
+package org.apache.fop.fo.pagination.bookmarks;
+
+import java.util.ArrayList;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.Locator;
+
+import org.apache.fop.apps.FOPException;
+import org.apache.fop.fo.FObj;
+import org.apache.fop.fo.FONode;
+import org.apache.fop.fo.PropertyList;
+import org.apache.fop.fo.extensions.Label;
+
+
+/**
+ * The fo:bookmark formatting object, first introduced in the
+ * XSL 1.1 WD. Prototype version only, subject to change as
+ * XSL 1.1 WD evolves.
+ */
+public class Bookmark extends FObj {
+ private Label bookmarkTitle;
+ private ArrayList childBookmarks = new ArrayList();
+
+ private String internalDestination;
+ private String externalDestination;
+
+ /**
+ * Create a new bookmark object.
+ *
+ * @param parent the parent fo node
+ */
+ public Bookmark(FONode parent) {
+ super(parent);
+ }
+
+ /**
+ * The attributes on the bookmark object are the internal and external
+ * destination. One of these is required.
+ *
+ * @see org.apache.fop.fo.FObj#processNode
+ * @todo to include all properties of fo:bookmark
+ */
+ public void processNode(String elementName, Locator locator,
+ Attributes attlist, PropertyList propertyList) throws FOPException
+ {
+ internalDestination =
+ attlist.getValue("internal-destination");
+ externalDestination =
+ attlist.getValue("external-destination");
+ if (externalDestination != null && !externalDestination.equals("")) {
+ getLogger().warn("fo:bookmark external-destination not supported currently.");
+ }
+
+ if (internalDestination == null || internalDestination.equals("")) {
+ getLogger().warn("fo:bookmark requires an internal-destination.");
+ }
+
+ }
+
+ /**
+ * @see org.apache.fop.fo.FONode#addChildNode(FONode)
+ */
+ protected void addChildNode(FONode obj) {
+ if (obj instanceof Label) {
+ bookmarkTitle = (Label)obj;
+ } else if (obj instanceof Bookmark) {
+ childBookmarks.add(obj);
+ }
+ }
+
+ /**
+ * Get the bookmark title for this bookmark
+ *
+ * @return the bookmark title string or an empty string if not found
+ */
+ public String getBookmarkTitle() {
+ return bookmarkTitle == null ? "" : bookmarkTitle.toString();
+ }
+
+ public String getInternalDestination() {
+ return internalDestination;
+ }
+
+ public String getExternalDestination() {
+ return externalDestination;
+ }
+
+ public ArrayList getChildBookmarks() {
+ return childBookmarks;
+ }
+
+ /**
+ * @see org.apache.fop.fo.FObj#getName()
+ */
+ public String getName() {
+ return "fo:bookmark";
+ }
+
+ /**
+ * @see org.apache.fop.fo.FObj#getNameId()
+ */
+ public int getNameId() {
+ return FO_BOOKMARK;
+ }
+}
import org.xml.sax.Locator;
import org.apache.fop.apps.FOPException;
-import org.apache.fop.fo.extensions.ExtensionElementMapping;
-import org.apache.fop.fo.extensions.Outline;
import org.apache.fop.fo.FONode;
import org.apache.fop.fo.FObj;
import org.apache.fop.fo.PropertyList;
* @see org.apache.fop.fo.FONode#addChildNode(FONode)
*/
protected void addChildNode(FONode obj) {
- if (obj instanceof Outline) {
+ if (obj instanceof Bookmark) {
bookmarks.add(obj);
}
}
*/
protected void endOfNode() throws FOPException {
if (bookmarks == null) {
- missingChildElementError("(fox:outline+)");
+ missingChildElementError("(fo:bookmark+)");
}
((Root) parent).setBookmarkTree(this);
}
*/
protected void validateChildNode(Locator loc, String nsURI, String localName)
throws ValidationException {
- if (!(nsURI == ExtensionElementMapping.URI &&
- localName.equals("outline"))) {
+ if (!(nsURI == FO_URI &&
+ localName.equals("bookmark"))) {
invalidChildError(loc, nsURI, localName);
}
}
if (parentBookmarkItem == null) {
PDFOutline outlineRoot = pdfDoc.getOutlineRoot();
pdfOutline = pdfDoc.getFactory().makeOutline(outlineRoot,
- bookmarkItem.getLabel(), intDest, yoffset);
+ bookmarkItem.getBookmarkTitle(), intDest, yoffset);
} else {
pdfOutline = pdfDoc.getFactory().makeOutline(parentBookmarkItem,
- bookmarkItem.getLabel(), intDest, yoffset);
+ bookmarkItem.getBookmarkTitle(), intDest, yoffset);
}
}