org.jpedal.io.types.Name Maven / Gradle / Ivy
/*
* ===========================================
* Java Pdf Extraction Decoding Access Library
* ===========================================
*
* Project Info: http://www.idrsolutions.com
* Help section for developers at http://www.idrsolutions.com/support/
*
* (C) Copyright 1997-2016 IDRsolutions and Contributors.
*
* This file is part of JPedal/JPDF2HTML5
*
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* ---------------
* Name.java
* ---------------
*/
package org.jpedal.io.types;
import org.jpedal.exception.PdfSecurityException;
import static org.jpedal.io.ObjectDecoder.debugFastCode;
import static org.jpedal.io.ObjectDecoder.padding;
import org.jpedal.io.ObjectUtils;
import org.jpedal.io.PdfFileReader;
import org.jpedal.io.security.DecryptionFactory;
import org.jpedal.objects.raw.PdfDictionary;
import org.jpedal.objects.raw.PdfObject;
import org.jpedal.utils.LogWriter;
import org.jpedal.utils.StringUtils;
/**
*
*/
public class Name {
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