xrefTrailerResolver.reset(); xrefTrailerResolver.nextXrefObj(0, XRefType.TABLE); for (Entry<COSObjectKey, Long> entry : bfSearchCOSObjectKeyOffsets.entrySet()) xrefTrailerResolver.setXRef(entry.getKey(), entry.getValue()); xrefTrailerResolver.setStartxref(0); trailer = xrefTrailerResolver.getTrailer(); getDocument().setTrailer(trailer); boolean searchForObjStreamsDone = false;
+ source.getPosition()); COSDictionary trailer = xrefTrailerResolver.getCurrentTrailer(); COSDictionary trailer = xrefTrailerResolver.getCurrentTrailer(); trailer.setLong(COSName.PREV, prev); xrefTrailerResolver.setStartxref(startXrefOffset); COSDictionary trailer = xrefTrailerResolver.getTrailer(); document.setTrailer(trailer); document.setIsXRefStream(XRefType.STREAM == xrefTrailerResolver.getXrefType()); document.addXRefTable(xrefTrailerResolver.getXrefTable()); return trailer;
/** * Extracts and compares first and last trailers for PDF version between 1.1 and 1.4. * * @param ctx the preflight context. */ protected void checkTrailersForLinearizedPDF14(PreflightContext ctx) { COSDictionary first = ctx.getXrefTrailerResolver().getFirstTrailer(); if (first == null) { addValidationError(ctx, new ValidationError(ERROR_SYNTAX_TRAILER, "There are no trailer in the PDF file")); } else { COSDictionary last = ctx.getXrefTrailerResolver().getLastTrailer(); COSDocument cosDoc = new COSDocument(); checkMainTrailer(ctx, first); if (!compareIds(first, last, cosDoc)) { addValidationError(ctx, new ValidationError(PreflightConstants.ERROR_SYNTAX_TRAILER_ID_CONSISTENCY, "ID is different in the first and the last trailer")); } COSUtils.closeDocumentQuietly(cosDoc); } }
/** * Fills XRefTrailerResolver with data of given stream. * Stream must be of type XRef. * @param stream the stream to be read * @param objByteOffset the offset to start at * @param isStandalone should be set to true if the stream is not part of a hybrid xref table * @throws IOException if there is an error parsing the stream */ private void parseXrefStream(COSStream stream, long objByteOffset, boolean isStandalone) throws IOException { // the cross reference stream of a hybrid xref table will be added to the existing one // and we must not override the offset and the trailer if ( isStandalone ) { xrefTrailerResolver.nextXrefObj( objByteOffset, XRefType.STREAM ); xrefTrailerResolver.setTrailer( stream ); } PDFXrefStreamParser parser = new PDFXrefStreamParser( stream, document, xrefTrailerResolver ); parser.parse(); }
xrefTrailerResolver.nextXrefObj( startByteOffset, XRefType.TABLE ); int currGenID = Integer.parseInt(splitString[1]); COSObjectKey objKey = new COSObjectKey(currObjID, currGenID); xrefTrailerResolver.setXRef(objKey, currOffset);
/** * Check the XRef table by dereferencing all objects and fixing the offset if necessary. * * @throws IOException if something went wrong. */ private void checkXrefOffsets() throws IOException { // repair mode isn't available in non-lenient mode if (!isLenient) { return; } Map<COSObjectKey, Long> xrefOffset = xrefTrailerResolver.getXrefTable(); if (!validateXrefOffsets(xrefOffset)) { Map<COSObjectKey, Long> bfCOSObjectKeyOffsets = getBFCOSObjectOffsets(); if (!bfCOSObjectKeyOffsets.isEmpty()) { LOG.debug("Replaced read xref table with the results of a brute force search"); xrefOffset.clear(); xrefOffset.putAll(bfCOSObjectKeyOffsets); } } }
if (linearizedDict != null && ctx.getXrefTrailerResolver().getTrailerCount() == 2 && ctx.getFileLen() == linearizedDict.getLong(COSName.L))
xrefTrailerResolver.nextXrefObj(startByteOffset,XRefType.TABLE); int currGenID = Integer.parseInt(splitString[1]); COSObjectKey objKey = new COSObjectKey(currObjID, currGenID); xrefTrailerResolver.setXRef(objKey, currOffset);
/** * Fills XRefTrailerResolver with data of given stream. * Stream must be of type XRef. * @param stream the stream to be read * @param objByteOffset the offset to start at * @param isStandalone should be set to true if the stream is not part of a hybrid xref table * @throws IOException if there is an error parsing the stream */ private void parseXrefStream(COSStream stream, long objByteOffset, boolean isStandalone) throws IOException { // the cross reference stream of a hybrid xref table will be added to the existing one // and we must not override the offset and the trailer if ( isStandalone ) { xrefTrailerResolver.nextXrefObj( objByteOffset, XRefType.STREAM ); xrefTrailerResolver.setTrailer( stream ); } PDFXrefStreamParser parser = new PDFXrefStreamParser( stream, document, xrefTrailerResolver ); parser.parse(); }
Long offset = xrefTrailerResolver.getXrefTable().get(stmObjKey); if (offset != null && offset == -objstmObjNr)
if (linearizedDict != null && ctx.getXrefTrailerResolver().getTrailerCount() == 2 && ctx.getFileLen() == linearizedDict.getLong(COSName.L))
xrefTrailerResolver.reset(); xrefTrailerResolver.nextXrefObj(0, XRefType.TABLE); for (Entry<COSObjectKey, Long> entry : bfSearchCOSObjectKeyOffsets.entrySet()) xrefTrailerResolver.setXRef(entry.getKey(), entry.getValue()); xrefTrailerResolver.setStartxref(0); trailer = xrefTrailerResolver.getTrailer(); getDocument().setTrailer(trailer); boolean searchForObjStreamsDone = false;
xrefTrailerResolver.nextXrefObj( startByteOffset, XRefType.TABLE ); int currGenID = Integer.parseInt(splitString[1]); COSObjectKey objKey = new COSObjectKey(currObjID, currGenID); xrefTrailerResolver.setXRef(objKey, currOffset);
+ source.getPosition()); COSDictionary trailer = xrefTrailerResolver.getCurrentTrailer(); COSDictionary trailer = xrefTrailerResolver.getCurrentTrailer(); trailer.setLong(COSName.PREV, prev); xrefTrailerResolver.setStartxref(startXrefOffset); COSDictionary trailer = xrefTrailerResolver.getTrailer(); document.setTrailer(trailer); document.setIsXRefStream(XRefType.STREAM == xrefTrailerResolver.getXrefType()); document.addXRefTable(xrefTrailerResolver.getXrefTable()); return trailer;
/** * Fills XRefTrailerResolver with data of given stream. * Stream must be of type XRef. * @param stream the stream to be read * @param objByteOffset the offset to start at * @param isStandalone should be set to true if the stream is not part of a hybrid xref table * @throws IOException if there is an error parsing the stream */ private void parseXrefStream(COSStream stream, long objByteOffset, boolean isStandalone) throws IOException { // the cross reference stream of a hybrid xref table will be added to the existing one // and we must not override the offset and the trailer if ( isStandalone ) { xrefTrailerResolver.nextXrefObj( objByteOffset, XRefType.STREAM ); xrefTrailerResolver.setTrailer( stream ); } PDFXrefStreamParser parser = new PDFXrefStreamParser( stream, document, xrefTrailerResolver ); parser.parse(); }
continue; Map<COSObjectKey, Long> xrefOffset = xrefTrailerResolver.getXrefTable(); for (int i = 0; i < nrOfObjects; i++)
/** * Extracts and compares first and last trailers for PDF version between 1.1 and 1.4. * * @param ctx the preflight context. */ protected void checkTrailersForLinearizedPDF14(PreflightContext ctx) { COSDictionary first = ctx.getXrefTrailerResolver().getFirstTrailer(); if (first == null) { addValidationError(ctx, new ValidationError(ERROR_SYNTAX_TRAILER, "There are no trailer in the PDF file")); } else { COSDictionary last = ctx.getXrefTrailerResolver().getLastTrailer(); COSDocument cosDoc = new COSDocument(); checkMainTrailer(ctx, first); if (!compareIds(first, last, cosDoc)) { addValidationError(ctx, new ValidationError(PreflightConstants.ERROR_SYNTAX_TRAILER_ID_CONSISTENCY, "ID is different in the first and the last trailer")); } COSUtils.closeDocumentQuietly(cosDoc); } }