PageRefs(final PageRefs other, final PdfReader reader) { this.reader = reader; this.sizep = other.sizep; if (other.refsn != null) { refsn = new ArrayList<PRIndirectReference>(other.refsn); for (int k = 0; k < refsn.size(); ++k) { refsn.set(k, (PRIndirectReference)duplicatePdfObject(refsn.get(k), reader)); } } else this.refsp = (IntHashtable)other.refsp.clone(); }
PageRefs(final PageRefs other, final PdfReader reader) { this.reader = reader; this.sizep = other.sizep; if (other.refsn != null) { refsn = new ArrayList<PRIndirectReference>(other.refsn); for (int k = 0; k < refsn.size(); ++k) { refsn.set(k, (PRIndirectReference)duplicatePdfObject(refsn.get(k), reader)); } } else this.refsp = (IntHashtable)other.refsp.clone(); }
this.xrefObj = new ArrayList<PdfObject>(reader.xrefObj); for (int k = 0; k < reader.xrefObj.size(); ++k) { this.xrefObj.set(k, duplicatePdfObject(reader.xrefObj.get(k), this)); this.trailer = (PdfDictionary)duplicatePdfObject(reader.trailer, this); this.catalog = trailer.getAsDict(PdfName.ROOT); this.rootPages = catalog.getAsDict(PdfName.PAGES); this.objStmToOffset = reader.objStmToOffset; this.xref = reader.xref; this.cryptoRef = (PRIndirectReference)duplicatePdfObject(reader.cryptoRef, this); this.ownerPasswordUsed = reader.ownerPasswordUsed;
this.xrefObj = new ArrayList<PdfObject>(reader.xrefObj); for (int k = 0; k < reader.xrefObj.size(); ++k) { this.xrefObj.set(k, duplicatePdfObject(reader.xrefObj.get(k), this)); this.trailer = (PdfDictionary)duplicatePdfObject(reader.trailer, this); this.catalog = trailer.getAsDict(PdfName.ROOT); this.rootPages = catalog.getAsDict(PdfName.PAGES); this.objStmToOffset = reader.objStmToOffset; this.xref = reader.xref; this.cryptoRef = (PRIndirectReference)duplicatePdfObject(reader.cryptoRef, this); this.ownerPasswordUsed = reader.ownerPasswordUsed;
protected static PdfDictionary duplicatePdfDictionary(final PdfDictionary original, PdfDictionary copy, final PdfReader newReader) { if (copy == null) copy = new PdfDictionary(original.size()); for (Object element : original.getKeys()) { PdfName key = (PdfName)element; copy.put(key, duplicatePdfObject(original.get(key), newReader)); } return copy; }
protected static PdfDictionary duplicatePdfDictionary(final PdfDictionary original, PdfDictionary copy, final PdfReader newReader) { if (copy == null) copy = new PdfDictionary(original.size()); for (Object element : original.getKeys()) { PdfName key = (PdfName)element; copy.put(key, duplicatePdfObject(original.get(key), newReader)); } return copy; }
protected static PdfObject duplicatePdfObject(final PdfObject original, final PdfReader newReader) { if (original == null) return null; switch (original.type()) { case PdfObject.DICTIONARY: { return duplicatePdfDictionary((PdfDictionary)original, null, newReader); } case PdfObject.STREAM: { PRStream org = (PRStream)original; PRStream stream = new PRStream(org, null, newReader); duplicatePdfDictionary(org, stream, newReader); return stream; } case PdfObject.ARRAY: { PdfArray originalArray = (PdfArray) original; PdfArray arr = new PdfArray(originalArray.size()); for (Iterator<PdfObject> it = originalArray.listIterator(); it.hasNext();) { arr.add(duplicatePdfObject(it.next(), newReader)); } return arr; } case PdfObject.INDIRECT: { PRIndirectReference org = (PRIndirectReference)original; return new PRIndirectReference(newReader, org.getNumber(), org.getGeneration()); } default: return original; } }
protected static PdfObject duplicatePdfObject(final PdfObject original, final PdfReader newReader) { if (original == null) return null; switch (original.type()) { case PdfObject.DICTIONARY: { return duplicatePdfDictionary((PdfDictionary)original, null, newReader); } case PdfObject.STREAM: { PRStream org = (PRStream)original; PRStream stream = new PRStream(org, null, newReader); duplicatePdfDictionary(org, stream, newReader); return stream; } case PdfObject.ARRAY: { PdfArray originalArray = (PdfArray) original; PdfArray arr = new PdfArray(originalArray.size()); for (Iterator<PdfObject> it = originalArray.listIterator(); it.hasNext();) { arr.add(duplicatePdfObject(it.next(), newReader)); } return arr; } case PdfObject.INDIRECT: { PRIndirectReference org = (PRIndirectReference)original; return new PRIndirectReference(newReader, org.getNumber(), org.getGeneration()); } default: return original; } }