All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jpedal.io.types.DirectDictionaryToObject Maven / Gradle / Ivy

There is a newer version: 20151002
Show newest version
/*
 * ===========================================
 * 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-2017 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


 *
 * ---------------
 * DirectDictionaryToObject.java
 * ---------------
 */
package org.jpedal.io.types;

import org.jpedal.io.ObjectDecoder;
import static org.jpedal.io.ObjectDecoder.debugFastCode;
import static org.jpedal.io.ObjectDecoder.padding;
import org.jpedal.io.PdfFileReader;
import org.jpedal.objects.raw.ObjectFactory;
import org.jpedal.objects.raw.PdfObject;

/**
 *
 */
public class DirectDictionaryToObject {

    
    public static int convert(final PdfObject pdfObject, String objectRef, int i, final byte[] raw, final int PDFkeyInt, final PdfFileReader objectReader) {
        
        //convert data to new Dictionary object
        final PdfObject valueObj ;
        
        if(PDFkeyInt==-1){
            valueObj=pdfObject;
            
            //if only 1 item use that ref not parent and indirect (ie <>)
            int objCount=0;
            int refStarts=-1;
            int refEnds=-1;
            final int length=raw.length;
            if(raw[0]=='<'){
                for(int ii=0;ii2) || (raw[ii+1]!='L' && raw[ii+2]!='e' && raw[ii+3]!='n' ))) {
                        objCount++;
                    }
                    //find start of ref
                    if(objCount==1){
                        if(refStarts==-1){
                            if(raw[ii]>'0' && raw[ii]<'9') {
                                refStarts = ii;
                            }
                        }else{
                            if(raw[ii]=='R') {
                                refEnds = ii + 1;
                            }
                        }
                    }
                }
                
                if(objCount==1 && refStarts!=-1 && refEnds!=-1){
                    objectRef=new String(raw,refStarts,refEnds-refStarts);
                    valueObj.setRef(objectRef);
                }
            }
            
        }else{
            valueObj= ObjectFactory.createObject(PDFkeyInt,objectRef, pdfObject.getObjectType(), pdfObject.getID());
            valueObj.setInCompressedStream(pdfObject.isInCompressedStream());
            valueObj.setID(PDFkeyInt);
            
            //if it is cached, we need to copy across data so in correct Obj
            // (we read data before we created object so in wrong obj at this point)
            if(pdfObject.isCached()) {
                valueObj.moveCacheValues(pdfObject);
            }
            
            if(debugFastCode) {
                System.out.println("valueObj=" + valueObj + " pdfObject=" + pdfObject + " PDFkeyInt=" + PDFkeyInt + ' ' + pdfObject.getID() + ' ' + pdfObject.getParentID());
            }
        }
        
        if(debugFastCode) {
            System.out.println(padding + "Reading [<>] to " + valueObj + " into " + pdfObject + " i=" + i);
        }
        
        final ObjectDecoder objDecoder=new ObjectDecoder(objectReader);
        i=objDecoder.readDictionaryAsObject( valueObj, i, raw);
        
        //needed to ensure >>>> works
        if(i') {
            i--;
        }
        
        if(debugFastCode){
            System.out.println(padding+"data "+valueObj+" into pdfObject="+pdfObject+" i="+i);
        }
        
        //store value (already set above for -1
        if(PDFkeyInt!=-1) {
            pdfObject.setDictionary(PDFkeyInt, valueObj);
        }
        
        //roll on to end
        final int count=raw.length;
        while( i>>>
            {
                break;
            }
        }
        return i;
    }
    
}






© 2015 - 2024 Weber Informatics LLC | Privacy Policy