diff options
author | Simon Steiner <ssteiner@apache.org> | 2015-02-24 11:23:44 +0000 |
---|---|---|
committer | Simon Steiner <ssteiner@apache.org> | 2015-02-24 11:23:44 +0000 |
commit | 77e0508bb36a6c5e547857f2bea17e1def2a2abc (patch) | |
tree | 92f26caed0d59eba746b306b69a84e6895e610d8 /src/java/org/apache/fop/pdf/PDFResources.java | |
parent | c85d08c4b9adbf8135e18ad9c3f94e3469e4e12e (diff) | |
download | xmlgraphics-fop-77e0508bb36a6c5e547857f2bea17e1def2a2abc.tar.gz xmlgraphics-fop-77e0508bb36a6c5e547857f2bea17e1def2a2abc.zip |
FOP-2445: Merge PDF Linearization branch
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1661887 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/java/org/apache/fop/pdf/PDFResources.java')
-rw-r--r-- | src/java/org/apache/fop/pdf/PDFResources.java | 67 |
1 files changed, 59 insertions, 8 deletions
diff --git a/src/java/org/apache/fop/pdf/PDFResources.java b/src/java/org/apache/fop/pdf/PDFResources.java index f351b23be..9ba9c7f8f 100644 --- a/src/java/org/apache/fop/pdf/PDFResources.java +++ b/src/java/org/apache/fop/pdf/PDFResources.java @@ -52,7 +52,7 @@ public class PDFResources extends PDFDictionary { */ protected Set<PDFXObject> xObjects = new LinkedHashSet<PDFXObject>(); /** Map of color spaces (key: color space name) */ - protected Map<PDFName, PDFColorSpace> colorSpaces = new LinkedHashMap<PDFName, PDFColorSpace>(); + protected Map<LazyName, PDFColorSpace> colorSpaces = new LinkedHashMap<LazyName, PDFColorSpace>(); /** Map of ICC color spaces (key: ICC profile description) */ protected Map<String, PDFICCBasedColorSpace> iccColorSpaces = new LinkedHashMap<String, PDFICCBasedColorSpace>(); @@ -68,13 +68,11 @@ public class PDFResources extends PDFDictionary { /** * create a /Resources object. - * - * @param objnum the object's number */ - public PDFResources(int objnum) { + public PDFResources(PDFDocument doc) { /* generic creation of object */ super(); - setObjectNumber(objnum); + setObjectNumber(doc); } public void addContext(PDFResourceContext c) { @@ -156,7 +154,7 @@ public class PDFResources extends PDFDictionary { * @param colorSpace the color space */ public void addColorSpace(PDFColorSpace colorSpace) { - this.colorSpaces.put(new PDFName(colorSpace.getName()), colorSpace); + this.colorSpaces.put(new LazyName(colorSpace), colorSpace); if (colorSpace instanceof PDFICCBasedColorSpace) { PDFICCBasedColorSpace icc = (PDFICCBasedColorSpace)colorSpace; String desc = ColorProfileUtil.getICCProfileDescription( @@ -165,6 +163,16 @@ public class PDFResources extends PDFDictionary { } } + static class LazyName { + private PDFColorSpace colorSpace; + public LazyName(PDFColorSpace colorSpace) { + this.colorSpace = colorSpace; + } + public PDFName getName() { + return new PDFName(colorSpace.getName()); + } + } + /** * Returns a ICCBased color space by profile name. * @param desc the name of the color space @@ -181,8 +189,12 @@ public class PDFResources extends PDFDictionary { * @return the requested color space or null if it wasn't found */ public PDFColorSpace getColorSpace(PDFName name) { - PDFColorSpace cs = this.colorSpaces.get(name); - return cs; + for (Map.Entry<LazyName, PDFColorSpace> x : colorSpaces.entrySet()) { + if (x.getKey().getName().equals(name)) { + return x.getValue(); + } + } + return null; } /** @@ -303,4 +315,43 @@ public class PDFResources extends PDFDictionary { } } + @Override + public void getChildren(Set<PDFObject> children) { + getChildren(children, false); + } + + private void getChildren(Set<PDFObject> children, boolean isParent) { + super.getChildren(children); + for (PDFDictionary f : fonts.values()) { + children.add(f); + f.getChildren(children); + } + for (PDFResourceContext c : contexts) { + for (PDFXObject x : c.getXObjects()) { + children.add(x); + x.getChildren(children); + } + for (PDFPattern x : c.getPatterns()) { + children.add(x); + x.getChildren(children); + } + for (PDFShading x : c.getShadings()) { + children.add(x); + x.getChildren(children); + } + for (PDFGState x : c.getGStates()) { + children.add(x); + x.getChildren(children); + } + } + if (!isParent) { + for (PDFColorSpace x : colorSpaces.values()) { + children.add((PDFObject)x); + ((PDFObject)x).getChildren(children); + } + } + if (parent != null) { + parent.getChildren(children, true); + } + } } |