From 6025b6016517c6d898d8957d1d7e03ba71431912 Mon Sep 17 00:00:00 2001 From: tknall Date: Fri, 1 Dec 2006 12:20:24 +0000 Subject: Initial import of release 2.2. git-svn-id: https://joinup.ec.europa.eu/svn/pdf-as/trunk@4 7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c --- .../java/com/lowagie/text/pdf/PageResources.java | 187 +++++++++++++++++++++ 1 file changed, 187 insertions(+) create mode 100644 src/main/java/com/lowagie/text/pdf/PageResources.java (limited to 'src/main/java/com/lowagie/text/pdf/PageResources.java') diff --git a/src/main/java/com/lowagie/text/pdf/PageResources.java b/src/main/java/com/lowagie/text/pdf/PageResources.java new file mode 100644 index 0000000..e065945 --- /dev/null +++ b/src/main/java/com/lowagie/text/pdf/PageResources.java @@ -0,0 +1,187 @@ +/* + * $Id: PageResources.java,v 1.14 2005/10/17 17:35:34 psoares33 Exp $ + * + * Copyright 2003-2005 by Paulo Soares. + * + * The contents of this file are subject to the Mozilla Public License Version 1.1 + * (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.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the License. + * + * The Original Code is 'iText, a free JAVA-PDF library'. + * + * The Initial Developer of the Original Code is Bruno Lowagie. Portions created by + * the Initial Developer are Copyright (C) 1999, 2000, 2001, 2002 by Bruno Lowagie. + * All Rights Reserved. + * Co-Developer of the code is Paulo Soares. Portions created by the Co-Developer + * are Copyright (C) 2000, 2001, 2002 by Paulo Soares. All Rights Reserved. + * + * Contributor(s): all the names of the contributors are added in the source code + * where applicable. + * + * Alternatively, the contents of this file may be used under the terms of the + * LGPL license (the "GNU LIBRARY GENERAL PUBLIC LICENSE"), in which case the + * provisions of LGPL are applicable instead of those above. If you wish to + * allow use of your version of this file only under the terms of the LGPL + * License and not to allow others to use your version of this file under + * the MPL, indicate your decision by deleting the provisions above and + * replace them with the notice and other provisions required by the LGPL. + * If you do not delete the provisions above, a recipient may use your version + * of this file under either the MPL or the GNU LIBRARY GENERAL PUBLIC LICENSE. + * + * This library is free software; you can redistribute it and/or modify it + * under the terms of the MPL as stated above or under the terms of the GNU + * Library General Public License as published by the Free Software Foundation; + * either version 2 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Library general Public License for more + * details. + * + * If you didn't download this code from the following link, you should check if + * you aren't using an obsolete version: + * http://www.lowagie.com/iText/ + */ +package com.lowagie.text.pdf; + +import java.util.HashMap; +import java.util.Iterator; + +class PageResources { + + protected PdfDictionary fontDictionary = new PdfDictionary(); + protected PdfDictionary xObjectDictionary = new PdfDictionary(); + protected PdfDictionary colorDictionary = new PdfDictionary(); + protected PdfDictionary patternDictionary = new PdfDictionary(); + protected PdfDictionary shadingDictionary = new PdfDictionary(); + protected PdfDictionary extGStateDictionary = new PdfDictionary(); + protected PdfDictionary propertyDictionary = new PdfDictionary(); + protected HashMap forbiddenNames; + protected PdfDictionary originalResources; + protected int namePtr[] = {0}; + protected HashMap usedNames; + + PageResources() { + } + + void setOriginalResources(PdfDictionary resources, int newNamePtr[]) { + if (newNamePtr != null) + namePtr = newNamePtr; + originalResources = resources; + forbiddenNames = new HashMap(); + usedNames = new HashMap(); + if (resources == null) + return; + for (Iterator i = resources.getKeys().iterator(); i.hasNext();) { + PdfObject sub = PdfReader.getPdfObject(resources.get((PdfName)i.next())); + if (sub.isDictionary()) { + PdfDictionary dic = (PdfDictionary)sub; + for (Iterator j = dic.getKeys().iterator(); j.hasNext();) { + forbiddenNames.put(j.next(), null); + } + } + } + } + + PdfName translateName(PdfName name) { + PdfName translated = name; + if (forbiddenNames != null) { + translated = (PdfName)usedNames.get(name); + if (translated == null) { + while (true) { + translated = new PdfName("Xi" + (namePtr[0]++)); + if (!forbiddenNames.containsKey(translated)) + break; + } + usedNames.put(name, translated); + } + } + return translated; + } + + PdfName addFont(PdfName name, PdfIndirectReference reference) { + name = translateName(name); + fontDictionary.put(name, reference); + return name; + } + + PdfName addXObject(PdfName name, PdfIndirectReference reference) { + name = translateName(name); + xObjectDictionary.put(name, reference); + return name; + } + + PdfName addColor(PdfName name, PdfIndirectReference reference) { + name = translateName(name); + colorDictionary.put(name, reference); + return name; + } + + void addDefaultColor(PdfName name, PdfObject obj) { + if (obj == null || obj.isNull()) + colorDictionary.remove(name); + else + colorDictionary.put(name, obj); + } + + void addDefaultColor(PdfDictionary dic) { + colorDictionary.merge(dic); + } + + void addDefaultColorDiff(PdfDictionary dic) { + colorDictionary.mergeDifferent(dic); + } + + PdfName addShading(PdfName name, PdfIndirectReference reference) { + name = translateName(name); + shadingDictionary.put(name, reference); + return name; + } + + PdfName addPattern(PdfName name, PdfIndirectReference reference) { + name = translateName(name); + patternDictionary.put(name, reference); + return name; + } + + PdfName addExtGState(PdfName name, PdfIndirectReference reference) { + name = translateName(name); + extGStateDictionary.put(name, reference); + return name; + } + + PdfName addProperty(PdfName name, PdfIndirectReference reference) { + name = translateName(name); + propertyDictionary.put(name, reference); + return name; + } + + PdfDictionary getResources() { + PdfResources resources = new PdfResources(); + if (originalResources != null) + resources.putAll(originalResources); + resources.put(PdfName.PROCSET, new PdfLiteral("[/PDF /Text /ImageB /ImageC /ImageI]")); + resources.add(PdfName.FONT, fontDictionary); + resources.add(PdfName.XOBJECT, xObjectDictionary); + resources.add(PdfName.COLORSPACE, colorDictionary); + resources.add(PdfName.PATTERN, patternDictionary); + resources.add(PdfName.SHADING, shadingDictionary); + resources.add(PdfName.EXTGSTATE, extGStateDictionary); + resources.add(PdfName.PROPERTIES, propertyDictionary); + return resources; + } + + boolean hasResources() { + return (fontDictionary.size() > 0 + || xObjectDictionary.size() > 0 + || colorDictionary.size() > 0 + || patternDictionary.size() > 0 + || shadingDictionary.size() > 0 + || extGStateDictionary.size() > 0 + || propertyDictionary.size() > 0); + } +} \ No newline at end of file -- cgit v1.2.3