public PdfObject getRefersTo() { return getRefersTo(true); }
@Override public PdfObject getValue() { PdfObject obj = entry.getValue(); if (obj != null && obj.isIndirectReference()) { obj = ((PdfIndirectReference) obj).getRefersTo(true); } return obj; }
static boolean equalContent(PdfObject obj1, PdfObject obj2) { PdfObject direct1 = obj1 != null && obj1.isIndirectReference() ? ((PdfIndirectReference)obj1).getRefersTo(true) : obj1; PdfObject direct2 = obj2 != null && obj2.isIndirectReference() ? ((PdfIndirectReference)obj2).getRefersTo(true) : obj2; return direct1 != null && direct1.equals(direct2); } }
@Override public PdfObject next() { PdfObject obj = parentIterator.next(); if (obj != null && obj.isIndirectReference()) { obj = ((PdfIndirectReference) obj).getRefersTo(true); } return obj; }
@Override public PdfObject next() { PdfObject obj = array.next(); if (obj.isIndirectReference()) { obj = ((PdfIndirectReference) obj).getRefersTo(true); } return obj; }
/** * * @param asDirect true is to extract direct object always. */ public PdfObject get(PdfName key, boolean asDirect) { if (!asDirect) return map.get(key); else { PdfObject obj = map.get(key); if (obj != null && obj.getType() == INDIRECT_REFERENCE) return ((PdfIndirectReference)obj).getRefersTo(true); else return obj; } }
/** * @param asDirect true is to extract direct object always. */ public PdfObject get(int index, boolean asDirect) { if (!asDirect) return list.get(index); else { PdfObject obj = list.get(index); if (obj.getType() == INDIRECT_REFERENCE) return ((PdfIndirectReference) obj).getRefersTo(true); else return obj; } }
/** * Gets PdfObject by object number. * * @param objNum object number. * @return {@link PdfObject} or {@code null}, if object not found. */ public PdfObject getPdfObject(int objNum) { checkClosingStatus(); PdfIndirectReference reference = xref.get(objNum); if (reference == null) { return null; } else { return reference.getRefersTo(); } }
/** * Gets direct object and try to resolve indirects chain. * <p> * Note: If chain of references has length of more than 32, * this method return 31st reference in chain. * </p> */ public PdfObject getRefersTo(boolean recursively) { if (!recursively) { if (refersTo == null && !checkState(FLUSHED) && !checkState(MODIFIED) && !checkState(FREE) && getReader() != null) { refersTo = getReader().readObject(this); } return refersTo; } else { PdfObject currentRefersTo = getRefersTo(false); for (int i = 0; i < LENGTH_OF_INDIRECTS_CHAIN; i++) { if (currentRefersTo instanceof PdfIndirectReference) currentRefersTo = ((PdfIndirectReference) currentRefersTo).getRefersTo(false); else break; } return currentRefersTo; } }
switch (object.getType()) { case PdfObject.INDIRECT_REFERENCE: { String reffedCaption = getCaption(((PdfIndirectReference) object).getRefersTo(false)); return object.toString() + " -> " + reffedCaption;
protected PdfObject copyObject(PdfObject obj, PdfDocument documentTo, boolean allowDuplicating) { if (obj instanceof PdfIndirectReference) obj = ((PdfIndirectReference) obj).getRefersTo(); if (obj == null) { obj = PdfNull.PDF_NULL; return copiedIndirectReference.getRefersTo();
PdfDictionary outPageDict = (PdfDictionary) outPagesRef.get(i).getRefersTo(); PdfDictionary cmpPageDict = (PdfDictionary) cmpPagesRef.get(i).getRefersTo(); compareDictionariesExtended(outPageDict, cmpPageDict, currentPath, compareResult);
/** * Flushes all modified objects which have not been flushed yet. Used in case incremental updates. * @param forbiddenToFlush {@link Set<PdfIndirectReference>} of references that are forbidden to be flushed automatically. */ protected void flushModifiedWaitingObjects(Set<PdfIndirectReference> forbiddenToFlush) { PdfXrefTable xref = document.getXref(); for (int i = 1; i < xref.size(); i++) { PdfIndirectReference indirectReference = xref.get(i); if (null != indirectReference && !indirectReference.isFree() && !forbiddenToFlush.contains(indirectReference)) { boolean isModified = indirectReference.checkState(PdfObject.MODIFIED); if (isModified) { PdfObject obj = indirectReference.getRefersTo(false); if (obj != null) { if (!obj.equals(objectStream)) { obj.flush(); } } } } } if (objectStream != null && objectStream.getSize() > 0) { objectStream.flush(); objectStream = null; } }
private void write(PdfIndirectReference indirectReference) { if (document != null && !indirectReference.getDocument().equals(document)) { throw new PdfException(PdfException.PdfIndirectObjectBelongsToOtherPdfDocument); } if (indirectReference.isFree()) { Logger logger = LoggerFactory.getLogger(PdfOutputStream.class); logger.error(LogMessageConstant.FLUSHED_OBJECT_CONTAINS_FREE_REFERENCE); write(PdfNull.PDF_NULL); } else if (indirectReference.getRefersTo() == null) { Logger logger = LoggerFactory.getLogger(PdfOutputStream.class); logger.error(LogMessageConstant.FLUSHED_OBJECT_CONTAINS_REFERENCE_WHICH_NOT_REFER_TO_ANY_OBJECT); write(PdfNull.PDF_NULL); } else if (indirectReference.getGenNumber() == 0) { writeInteger(indirectReference.getObjNumber()). writeBytes(endIndirectWithZeroGenNr); } else { writeInteger(indirectReference.getObjNumber()). writeSpace(). writeInteger(indirectReference.getGenNumber()). writeBytes(endIndirect); } }
/** * Flushes all objects which have not been flushed yet. * @param forbiddenToFlush {@link Set<PdfIndirectReference>} of references that are forbidden to be flushed automatically. */ protected void flushWaitingObjects(Set<PdfIndirectReference> forbiddenToFlush) { PdfXrefTable xref = document.getXref(); boolean needFlush = true; while (needFlush) { needFlush = false; for (int i = 1; i < xref.size(); i++) { PdfIndirectReference indirectReference = xref.get(i); if (indirectReference != null && !indirectReference.isFree() && indirectReference.checkState(PdfObject.MUST_BE_FLUSHED) && !forbiddenToFlush.contains(indirectReference)) { PdfObject obj = indirectReference.getRefersTo(false); if (obj != null) { obj.flush(); needFlush = true; } } } } if (objectStream != null && objectStream.getSize() > 0) { objectStream.flush(); objectStream = null; } }
obj = reference.getRefersTo();
PdfObject refTo = ((PdfIndirectReference) obj).getRefersTo(); obj = refTo != null ? refTo : obj;
break; case PdfObject.INDIRECT_REFERENCE: markObjectToFlush(((PdfIndirectReference) pdfObject).getRefersTo(false));
if (reference.getObjStreamNumber() > 0) { PdfStream objectStream = (PdfStream) pdfDocument.getXref(). get(reference.getObjStreamNumber()).getRefersTo(false); readObjectStream(objectStream); return reference.refersTo;
public static PdfColorSpace makeColorSpace(PdfObject pdfObject) { if (pdfObject.isIndirectReference()) pdfObject = ((PdfIndirectReference) pdfObject).getRefersTo(); if (pdfObject.isArray() && ((PdfArray) pdfObject).size() == 1) pdfObject = ((PdfArray) pdfObject).get(0);