Browse Source

PR:

Obtained from:
Submitted by:
Reviewed by:
Converted fox:outline to fo:bookmark.  fox:label/fo:bookmark-title still to
be done.


git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@198221 13f79535-47bb-0310-9956-ffa450edef68
tags/Root_Temp_KnuthStylePageBreaking
Glen Mazza 19 years ago
parent
commit
0f57433994

+ 30
- 30
examples/fo/advanced/cid-fonts.fo View File

@@ -17,63 +17,63 @@
</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">

+ 32
- 32
examples/fo/basic/pdfoutline.fo View File

@@ -60,65 +60,65 @@ This files shows next to the trivial usage of fo:block and fo:inline examples of

<!-- 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 -->

+ 22
- 22
src/java/org/apache/fop/area/BookmarkData.java View File

@@ -23,7 +23,7 @@ import java.util.List;
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
@@ -33,8 +33,8 @@ import org.apache.fop.fo.extensions.Outline;
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;
@@ -57,8 +57,8 @@ public class BookmarkData extends OffDocumentItem implements Resolvable {
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));
}
}

@@ -100,21 +100,21 @@ public class BookmarkData extends OffDocumentItem implements Resolvable {
}

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

/**
@@ -195,20 +195,20 @@ public class BookmarkData extends OffDocumentItem implements Resolvable {
}

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

+ 2
- 1
src/java/org/apache/fop/fo/Constants.java View File

@@ -114,7 +114,8 @@ public interface Constants {
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;

+ 7
- 0
src/java/org/apache/fop/fo/FOElementMapping.java View File

@@ -46,6 +46,7 @@ public class FOElementMapping extends ElementMapping {
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",
@@ -152,6 +153,12 @@ public class FOElementMapping extends ElementMapping {
}
}

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

+ 9
- 1
src/java/org/apache/fop/fo/PropertySets.java View File

@@ -202,7 +202,15 @@ public class PropertySets {
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);

+ 0
- 7
src/java/org/apache/fop/fo/extensions/ExtensionElementMapping.java View File

@@ -44,17 +44,10 @@ public class ExtensionElementMapping extends ElementMapping {
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);

src/java/org/apache/fop/fo/extensions/Outline.java → src/java/org/apache/fop/fo/pagination/bookmarks/Bookmark.java View File

@@ -14,9 +14,9 @@
* limitations under the License.
*/

/* $Id$ */
/* $Id $ */

package org.apache.fop.fo.extensions;
package org.apache.fop.fo.pagination.bookmarks;

import java.util.ArrayList;

@@ -24,35 +24,39 @@ 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 outline object for the pdf bookmark extension.
* The outline element contains a label and optionally more outlines.
* 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 Outline extends ExtensionObj {
private Label label;
private ArrayList outlines = new ArrayList();
public class Bookmark extends FObj {
private Label bookmarkTitle;
private ArrayList childBookmarks = new ArrayList();

private String internalDestination;
private String externalDestination;

/**
* Create a new outline object.
* Create a new bookmark object.
*
* @param parent the parent fo node
*/
public Outline(FONode parent) {
public Bookmark(FONode parent) {
super(parent);
}

/**
* The attributes on the outline object are the internal and external
* 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
@@ -62,11 +66,11 @@ public class Outline extends ExtensionObj {
externalDestination =
attlist.getValue("external-destination");
if (externalDestination != null && !externalDestination.equals("")) {
getLogger().warn("fox:outline external-destination not supported currently.");
getLogger().warn("fo:bookmark external-destination not supported currently.");
}

if (internalDestination == null || internalDestination.equals("")) {
getLogger().warn("fox:outline requires an internal-destination.");
getLogger().warn("fo:bookmark requires an internal-destination.");
}

}
@@ -76,20 +80,19 @@ public class Outline extends ExtensionObj {
*/
protected void addChildNode(FONode obj) {
if (obj instanceof Label) {
label = (Label)obj;
} else if (obj instanceof Outline) {
outlines.add(obj);
bookmarkTitle = (Label)obj;
} else if (obj instanceof Bookmark) {
childBookmarks.add(obj);
}
}

/**
* Get the label string.
* This gets the label string from the child label element.
* Get the bookmark title for this bookmark
*
* @return the label string or empty if not found
* @return the bookmark title string or an empty string if not found
*/
public String getLabel() {
return label == null ? "" : label.toString();
public String getBookmarkTitle() {
return bookmarkTitle == null ? "" : bookmarkTitle.toString();
}

public String getInternalDestination() {
@@ -100,11 +103,21 @@ public class Outline extends ExtensionObj {
return externalDestination;
}

public ArrayList getOutlines() {
return outlines;
public ArrayList getChildBookmarks() {
return childBookmarks;
}

/**
* @see org.apache.fop.fo.FObj#getName()
*/
public String getName() {
return "(http://xml.apache.org/fop/extensions) outline";
return "fo:bookmark";
}

/**
* @see org.apache.fop.fo.FObj#getNameId()
*/
public int getNameId() {
return FO_BOOKMARK;
}
}

+ 4
- 6
src/java/org/apache/fop/fo/pagination/bookmarks/BookmarkTree.java View File

@@ -24,8 +24,6 @@ import java.util.ArrayList;
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;
@@ -52,7 +50,7 @@ public class BookmarkTree extends FObj {
* @see org.apache.fop.fo.FONode#addChildNode(FONode)
*/
protected void addChildNode(FONode obj) {
if (obj instanceof Outline) {
if (obj instanceof Bookmark) {
bookmarks.add(obj);
}
}
@@ -62,7 +60,7 @@ public class BookmarkTree extends FObj {
*/
protected void endOfNode() throws FOPException {
if (bookmarks == null) {
missingChildElementError("(fox:outline+)");
missingChildElementError("(fo:bookmark+)");
}
((Root) parent).setBookmarkTree(this);
}
@@ -73,8 +71,8 @@ public class BookmarkTree extends FObj {
*/
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);
}
}

+ 2
- 2
src/java/org/apache/fop/render/pdf/PDFRenderer.java View File

@@ -311,10 +311,10 @@ public class PDFRenderer extends PrintRenderer {
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);
}
}


Loading…
Cancel
Save