public PdfXrefTable(int capacity) { if (capacity < 1) { capacity = INITIAL_CAPACITY; } xref = new PdfIndirectReference[capacity]; freeReferencesLinkedList = new TreeMap<>(); add((PdfIndirectReference) new PdfIndirectReference(null, 0, MAX_GENERATION, 0).setState(PdfObject.FREE)); }
PdfIndirectReference createNewIndirectReference(PdfDocument document) { PdfIndirectReference reference = new PdfIndirectReference(document, ++count); add(reference); return (PdfIndirectReference) reference.setState(PdfObject.MODIFIED); }
/** * Creates next available indirect reference. * * @return created indirect reference. */ protected PdfIndirectReference createNextIndirectReference(PdfDocument document) { PdfIndirectReference reference = new PdfIndirectReference(document, ++count); add(reference); return (PdfIndirectReference) reference.setState(PdfObject.MODIFIED); }
continue; xref[next] = (PdfIndirectReference) new PdfIndirectReference(pdfDocument, next, 0).setState(PdfObject.FREE).setState(PdfObject.MODIFIED); } else if (xref[next].getGenNumber() == MAX_GENERATION && xref[next].getOffset() == 0) { continue;
protected PdfObject readReference(boolean readAsDirect) { int num = tokens.getObjNr(); PdfXrefTable table = pdfDocument.getXref(); PdfIndirectReference reference = table.get(num); if (reference != null) { if (reference.isFree()) { Logger logger = LoggerFactory.getLogger(PdfReader.class); logger.warn(MessageFormatUtil.format(LogMessageConstant.INVALID_INDIRECT_REFERENCE, tokens.getObjNr(), tokens.getGenNr())); return createPdfNullInstance(readAsDirect); } if (reference.getGenNumber() != tokens.getGenNr()) { if (fixedXref) { Logger logger = LoggerFactory.getLogger(PdfReader.class); logger.warn(MessageFormatUtil.format(LogMessageConstant.INVALID_INDIRECT_REFERENCE, tokens.getObjNr(), tokens.getGenNr())); return createPdfNullInstance(readAsDirect); } else { throw new PdfException(PdfException.InvalidIndirectReference1, MessageFormatUtil.format("{0} {1} R", reference.getObjNumber(), reference.getGenNumber())); } } } else { reference = table.add((PdfIndirectReference) new PdfIndirectReference(pdfDocument, num, tokens.getGenNr(), 0).setState(PdfObject.READING)); } return reference; }
switch (type) { case 0: newReference = (PdfIndirectReference) new PdfIndirectReference(pdfDocument, base, field3, field2).setState(PdfObject.FREE); break; case 1: newReference = new PdfIndirectReference(pdfDocument, base, field3, field2); break; case 2: newReference = new PdfIndirectReference(pdfDocument, base, 0, field3); newReference.setObjStreamNumber((int) field2); break;
int gen = obj[1]; if (xref.get(num) == null || xref.get(num).getGenNumber() <= gen) { xref.add(new PdfIndirectReference(pdfDocument, num, gen, pos));
reference = new PdfIndirectReference(pdfDocument, num, gen, pos); } else if (reference.checkState(PdfObject.READING) && reference.getGenNumber() == gen) { reference.setOffset(pos);