KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > lowagie > text > pdf > PageResources


1 /*
2  * $Id: PageResources.java 2414 2006-09-24 15:49:14Z psoares33 $
3  *
4  * Copyright 2003-2005 by Paulo Soares.
5  *
6  * The contents of this file are subject to the Mozilla Public License Version 1.1
7  * (the "License"); you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at http://www.mozilla.org/MPL/
9  *
10  * Software distributed under the License is distributed on an "AS IS" basis,
11  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
12  * for the specific language governing rights and limitations under the License.
13  *
14  * The Original Code is 'iText, a free JAVA-PDF library'.
15  *
16  * The Initial Developer of the Original Code is Bruno Lowagie. Portions created by
17  * the Initial Developer are Copyright (C) 1999, 2000, 2001, 2002 by Bruno Lowagie.
18  * All Rights Reserved.
19  * Co-Developer of the code is Paulo Soares. Portions created by the Co-Developer
20  * are Copyright (C) 2000, 2001, 2002 by Paulo Soares. All Rights Reserved.
21  *
22  * Contributor(s): all the names of the contributors are added in the source code
23  * where applicable.
24  *
25  * Alternatively, the contents of this file may be used under the terms of the
26  * LGPL license (the "GNU LIBRARY GENERAL PUBLIC LICENSE"), in which case the
27  * provisions of LGPL are applicable instead of those above. If you wish to
28  * allow use of your version of this file only under the terms of the LGPL
29  * License and not to allow others to use your version of this file under
30  * the MPL, indicate your decision by deleting the provisions above and
31  * replace them with the notice and other provisions required by the LGPL.
32  * If you do not delete the provisions above, a recipient may use your version
33  * of this file under either the MPL or the GNU LIBRARY GENERAL PUBLIC LICENSE.
34  *
35  * This library is free software; you can redistribute it and/or modify it
36  * under the terms of the MPL as stated above or under the terms of the GNU
37  * Library General Public License as published by the Free Software Foundation;
38  * either version 2 of the License, or any later version.
39  *
40  * This library is distributed in the hope that it will be useful, but WITHOUT
41  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
42  * FOR A PARTICULAR PURPOSE. See the GNU Library general Public License for more
43  * details.
44  *
45  * If you didn't download this code from the following link, you should check if
46  * you aren't using an obsolete version:
47  * http://www.lowagie.com/iText/
48  */

49 package com.lowagie.text.pdf;
50
51 import java.util.HashMap JavaDoc;
52 import java.util.Iterator JavaDoc;
53
54 class PageResources {
55     
56     protected PdfDictionary fontDictionary = new PdfDictionary();
57     protected PdfDictionary xObjectDictionary = new PdfDictionary();
58     protected PdfDictionary colorDictionary = new PdfDictionary();
59     protected PdfDictionary patternDictionary = new PdfDictionary();
60     protected PdfDictionary shadingDictionary = new PdfDictionary();
61     protected PdfDictionary extGStateDictionary = new PdfDictionary();
62     protected PdfDictionary propertyDictionary = new PdfDictionary();
63     protected HashMap JavaDoc forbiddenNames;
64     protected PdfDictionary originalResources;
65     protected int namePtr[] = {0};
66     protected HashMap JavaDoc usedNames;
67
68     PageResources() {
69     }
70     
71     void setOriginalResources(PdfDictionary resources, int newNamePtr[]) {
72         if (newNamePtr != null)
73             namePtr = newNamePtr;
74         forbiddenNames = new HashMap JavaDoc();
75         usedNames = new HashMap JavaDoc();
76         if (resources == null)
77             return;
78         originalResources = new PdfDictionary();
79         originalResources.merge(resources);
80         for (Iterator JavaDoc i = resources.getKeys().iterator(); i.hasNext();) {
81             PdfName key = (PdfName)i.next();
82             PdfObject sub = PdfReader.getPdfObject(resources.get(key));
83             if (sub != null && sub.isDictionary()) {
84                 PdfDictionary dic = (PdfDictionary)sub;
85                 for (Iterator JavaDoc j = dic.getKeys().iterator(); j.hasNext();) {
86                     forbiddenNames.put(j.next(), null);
87                 }
88                 PdfDictionary dic2 = new PdfDictionary();
89                 dic2.merge(dic);
90                 originalResources.put(key, dic2);
91             }
92         }
93     }
94     
95     PdfName translateName(PdfName name) {
96         PdfName translated = name;
97         if (forbiddenNames != null) {
98             translated = (PdfName)usedNames.get(name);
99             if (translated == null) {
100                 while (true) {
101                     translated = new PdfName("Xi" + (namePtr[0]++));
102                     if (!forbiddenNames.containsKey(translated))
103                         break;
104                 }
105                 usedNames.put(name, translated);
106             }
107         }
108         return translated;
109     }
110     
111     PdfName addFont(PdfName name, PdfIndirectReference reference) {
112         name = translateName(name);
113         fontDictionary.put(name, reference);
114         return name;
115     }
116
117     PdfName addXObject(PdfName name, PdfIndirectReference reference) {
118         name = translateName(name);
119         xObjectDictionary.put(name, reference);
120         return name;
121     }
122
123     PdfName addColor(PdfName name, PdfIndirectReference reference) {
124         name = translateName(name);
125         colorDictionary.put(name, reference);
126         return name;
127     }
128
129     void addDefaultColor(PdfName name, PdfObject obj) {
130         if (obj == null || obj.isNull())
131             colorDictionary.remove(name);
132         else
133             colorDictionary.put(name, obj);
134     }
135
136     void addDefaultColor(PdfDictionary dic) {
137         colorDictionary.merge(dic);
138     }
139
140     void addDefaultColorDiff(PdfDictionary dic) {
141         colorDictionary.mergeDifferent(dic);
142     }
143
144     PdfName addShading(PdfName name, PdfIndirectReference reference) {
145         name = translateName(name);
146         shadingDictionary.put(name, reference);
147         return name;
148     }
149     
150     PdfName addPattern(PdfName name, PdfIndirectReference reference) {
151         name = translateName(name);
152         patternDictionary.put(name, reference);
153         return name;
154     }
155
156     PdfName addExtGState(PdfName name, PdfIndirectReference reference) {
157         name = translateName(name);
158         extGStateDictionary.put(name, reference);
159         return name;
160     }
161
162     PdfName addProperty(PdfName name, PdfIndirectReference reference) {
163         name = translateName(name);
164         propertyDictionary.put(name, reference);
165         return name;
166     }
167
168     PdfDictionary getResources() {
169        PdfResources resources = new PdfResources();
170         if (originalResources != null)
171             resources.putAll(originalResources);
172         resources.put(PdfName.PROCSET, new PdfLiteral("[/PDF /Text /ImageB /ImageC /ImageI]"));
173         resources.add(PdfName.FONT, fontDictionary);
174         resources.add(PdfName.XOBJECT, xObjectDictionary);
175         resources.add(PdfName.COLORSPACE, colorDictionary);
176         resources.add(PdfName.PATTERN, patternDictionary);
177         resources.add(PdfName.SHADING, shadingDictionary);
178         resources.add(PdfName.EXTGSTATE, extGStateDictionary);
179         resources.add(PdfName.PROPERTIES, propertyDictionary);
180         return resources;
181     }
182     
183     boolean hasResources() {
184         return (fontDictionary.size() > 0
185             || xObjectDictionary.size() > 0
186             || colorDictionary.size() > 0
187             || patternDictionary.size() > 0
188             || shadingDictionary.size() > 0
189             || extGStateDictionary.size() > 0
190             || propertyDictionary.size() > 0);
191     }
192 }
Popular Tags