public static int setNameTreeValue( final PdfObject pdfObject, int i, final byte[] raw, final int length, final boolean ignoreRecursion, final int PDFkeyInt, final PdfFileReader objectReader) { boolean isRef = false; // move to start while (raw[i] != '[') { // can be number as well if (raw[i] == '(') { // allow for W (7) isRef = false; break; } // allow for number as in refer 9 0 R if (raw[i] >= '0' && raw[i] <= '9') { isRef = true; break; } i++; } // allow for direct or indirect byte[] data = raw; int start = i, j = i; int count = 0; // read ref data and slot in if (isRef) { // number final int[] values = StreamReaderUtils.readRefFromStream(raw, i); i = values[2]; final int generation = values[1]; final int number = values[0]; if (raw[i] != 82) // we are expecting R to end ref { throw new RuntimeException( "3. Unexpected value in file " + raw[i] + " - please send to IDRsolutions for analysis"); } if (!ignoreRecursion) { // read the Dictionary data data = objectReader.readObjectAsByteArray( pdfObject, objectReader.isCompressed(number, generation), number, generation); // allow for data in Linear object not yet loaded if (data == null) { pdfObject.setFullyResolved(false); if (debugFastCode) { System.out.println(padding + "Data not yet loaded"); } i = length; return i; } // lose obj at start j = 3; while (data[j - 1] != 106 && data[j - 2] != 98 && data[j - 3] != 111 && data[j - 3] != '<') { j++; } j = StreamReaderUtils.skipSpaces(data, j); // reset pointer start = j; } } // move to end while (j < data.length) { if (data[j] == '[' || data[j] == '(') { count++; } else if (data[j] == ']' || data[j] == ')') { count--; } if (count == 0) { break; } j++; } if (!ignoreRecursion) { final int stringLength = j - start + 1; byte[] newString = new byte[stringLength]; System.arraycopy(data, start, newString, 0, stringLength); if (pdfObject.getObjectType() != PdfDictionary.Encrypt) { final DecryptionFactory decryption = objectReader.getDecryptionObject(); if (decryption != null) { try { newString = decryption.decrypt( newString, pdfObject.getObjectRefAsString(), false, null, false, false); } catch (final PdfSecurityException e) { LogWriter.writeLog("Exception: " + e.getMessage()); } } } pdfObject.setTextStreamValue(PDFkeyInt, newString); if (debugFastCode) { System.out.println(padding + "name=" + new String(newString) + " set in " + pdfObject); } } // roll on if (!isRef) { i = j; } return i; }