Example usage for org.apache.pdfbox.cos COSString COSString

List of usage examples for org.apache.pdfbox.cos COSString COSString

Introduction

In this page you can find the example usage for org.apache.pdfbox.cos COSString COSString.

Prototype

public COSString(String text) 

Source Link

Document

Creates a new text string from a Java String.

Usage

From source file:at.gv.egiz.pdfas.lib.impl.signing.pdfbox.PADESPDFBOXSigner.java

License:EUPL

@Override
public byte[] rewritePlainSignature(byte[] plainSignature) {
    String signature = new COSString(plainSignature).getHexString();
    byte[] pdfSignature = signature.getBytes();
    return pdfSignature;
}

From source file:at.gv.egiz.pdfas.lib.impl.signing.pdfbox2.PADESPDFBOXSigner.java

License:EUPL

@Override
public byte[] rewritePlainSignature(byte[] plainSignature) {
    String signature = new COSString(plainSignature).toHexString();
    byte[] pdfSignature = signature.getBytes();
    return pdfSignature;
}

From source file:com.aaasec.sigserv.csspsupport.pdfbox.modifications.CsCOSWriter.java

License:Apache License

private void doWriteSignature(COSDocument doc) throws IOException, SignatureException {
    // need to calculate the ByteRange
    if (signaturePosition[0] > 0 && byterangePosition[1] > 0) {
        int left = (int) getStandardOutput().getPos() - signaturePosition[1];
        String newByteRange = "0 " + signaturePosition[0] + " " + signaturePosition[1] + " " + left + "]";
        int leftByterange = byterangePosition[1] - byterangePosition[0] - newByteRange.length();
        if (leftByterange < 0) {
            throw new IOException("Can't write new ByteRange, not enough space");
        }// w w w .  j ava2  s  .co  m
        getStandardOutput().setPos(byterangePosition[0]);
        getStandardOutput().write(newByteRange.getBytes());
        for (int i = 0; i < leftByterange; ++i) {
            getStandardOutput().write(0x20);
        }

        getStandardOutput().setPos(0);
        // Begin - extracting document
        InputStream filterInputStream = new COSFilterInputStream(in,
                new int[] { 0, signaturePosition[0], signaturePosition[1], left });
        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        try {
            byte[] buffer = new byte[1024];
            int c;
            while ((c = filterInputStream.read(buffer)) != -1) {
                bytes.write(buffer, 0, c);
            }
        } finally {
            if (filterInputStream != null) {
                filterInputStream.close();
            }
        }

        byte[] pdfContent = bytes.toByteArray();
        // End - extracting document

        SignatureInterface signatureInterface = doc.getSignatureInterface();
        byte[] sign = signatureInterface.sign(new ByteArrayInputStream(pdfContent));
        String signature = new COSString(sign).getHexString();
        int leftSignaturerange = signaturePosition[1] - signaturePosition[0] - signature.length();
        if (leftSignaturerange < 0) {
            throw new IOException("Can't write signature, not enough space");
        }
        getStandardOutput().setPos(signaturePosition[0] + 1);
        getStandardOutput().write(signature.getBytes());
    }
}

From source file:com.aaasec.sigserv.csspsupport.pdfbox.modifications.CsCOSWriter.java

License:Apache License

/**
 * visitFromArray method comment.//from w ww.  j  a  v  a2 s .  co m
 *
 * @param obj The object that is being visited.
 *
 * @throws COSVisitorException If there is an exception while visiting this
 * object.
 *
 * @return null
 */
public Object visitFromArray(COSArray obj) throws COSVisitorException {
    try {
        int count = 0;
        getStandardOutput().write(ARRAY_OPEN);
        for (Iterator<COSBase> i = obj.iterator(); i.hasNext();) {
            COSBase current = i.next();
            if (current instanceof COSDictionary) {
                addObjectToWrite(current);
                writeReference(current);
            } else if (current instanceof COSObject) {
                COSBase subValue = ((COSObject) current).getObject();
                if (subValue instanceof COSDictionary || subValue == null) {
                    addObjectToWrite(current);
                    writeReference(current);
                } else {
                    subValue.accept(this);
                }
            } else if (current == null) {
                COSNull.NULL.accept(this);
            } else if (current instanceof COSString) {
                COSString copy = new COSString(((COSString) current).getString());
                copy.accept(this);
            } else {
                current.accept(this);
            }
            count++;
            if (i.hasNext()) {
                if (count % 10 == 0) {
                    getStandardOutput().writeEOL();
                } else {
                    getStandardOutput().write(SPACE);
                }
            }
        }
        getStandardOutput().write(ARRAY_CLOSE);
        getStandardOutput().writeEOL();
        return null;
    } catch (IOException e) {
        throw new COSVisitorException(e);
    }
}

From source file:com.aaasec.sigserv.csspsupport.pdfbox.modifications.CsCOSWriter.java

License:Apache License

/**
 * This will write the pdf document./*  w ww .  ja  v a2 s . c  om*/
 *
 * @param doc The document to write.
 * @param idTime The time seed used to generate the id
 *
 * @throws COSVisitorException If an error occurs while generating the data.
 */
public void write(PDDocument doc, long idTime) throws COSVisitorException {
    document = doc;
    if (incrementalUpdate) {
        prepareIncrement(doc);
    }

    // if the document says we should remove encryption, then we shouldn't encrypt
    if (doc.isAllSecurityToBeRemoved()) {
        this.willEncrypt = false;
        // also need to get rid of the "Encrypt" in the trailer so readers 
        // don't try to decrypt a document which is not encrypted
        COSDocument cosDoc = doc.getDocument();
        COSDictionary trailer = cosDoc.getTrailer();
        trailer.removeItem(COSName.ENCRYPT);
    } else {
        SecurityHandler securityHandler = document.getSecurityHandler();
        if (securityHandler != null) {
            try {
                securityHandler.prepareDocumentForEncryption(document);
                this.willEncrypt = true;
            } catch (IOException e) {
                throw new COSVisitorException(e);
            } catch (CryptographyException e) {
                throw new COSVisitorException(e);
            }
        } else {
            this.willEncrypt = false;
        }
    }

    COSDocument cosDoc = document.getDocument();
    COSDictionary trailer = cosDoc.getTrailer();
    COSArray idArray = (COSArray) trailer.getDictionaryObject(COSName.ID);
    if (idArray == null || incrementalUpdate) {
        try {

            //algorithm says to use time/path/size/values in doc to generate
            //the id.  We don't have path or size, so do the best we can
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(Long.toString(idTime).getBytes("ISO-8859-1"));
            COSDictionary info = (COSDictionary) trailer.getDictionaryObject(COSName.INFO);
            if (info != null) {
                Iterator<COSBase> values = info.getValues().iterator();
                while (values.hasNext()) {
                    md.update(values.next().toString().getBytes("ISO-8859-1"));
                }
            }
            idArray = new COSArray();
            COSString id = new COSString(md.digest());
            idArray.add(id);
            idArray.add(id);
            trailer.setItem(COSName.ID, idArray);
        } catch (NoSuchAlgorithmException e) {
            throw new COSVisitorException(e);
        } catch (UnsupportedEncodingException e) {
            throw new COSVisitorException(e);
        }
    }
    cosDoc.accept(this);
}

From source file:com.santaanna.friendlyreader.pdfstod.pdfstod3.ReplaceStringStreamEngine.java

License:Apache License

public String splitMeningar(String reststr, COSStream cosStream) {
    SkrivUt(4, "Frst i splitmeningar.");
    // Anvnd meningsvektor fr att hmta meningar.
    // Metoden rknar bara tecknen i string och mening och antar att de r synkade
    // i vrigt.//from w  w  w . j a  v  a2s  .  c  o m
    // ShowText Tj = new ShowText(); // Tj
    // ShowTextGlyph TJ = new ShowTextGlyph(); // TJ
    int mindex = mind;
    PDFOperator Tj = PDFOperator.getOperator("Tj");
    PDFOperator TJ = PDFOperator.getOperator("TJ");
    String restretur = ""; // Resterande text p meningsrad. En arbetsstruktur.
    String men; // Aktuell meningsstruktur.
    if (reststr != "")
        men = reststr;
    else
        men = meningsvektor.get(mindex).helameningen;
    // terskrivet Hit!
    int menlen = men.length(); // Lngden p den aktuella meningen.
    int mvektlen = meningsvektor.size(); // Storleken p vektorn.
    byte[] bytestr; // string representerad som byte[]
    byte[] tempbstr; // byte[] fr temporr lagring.
    int strlen; // Lngden p den aktuella stringen.
    COSString prevny = null;
    boolean firsttime = true;
    boolean kapad = false;
    List tokens = null;
    try {
        tokens = cosStream.getStreamTokens();
        // pageTokens.add(tokens); Fungerande hantering.
        SkrivUt(4, "Splitmeningar, data innan split.");
        listTokens(tokens); // Data innan split.
        // List tokens = getTokenList();// AH* parser.getTokens(); Tidigare hmtning av lista.
        // Dvs hmta INTE tokens frn den parsade filen. Anvnd tidigare data.
        LinkedList arguments = new LinkedList(); // AH* argumenten till operatorn.
        SkrivUt(4, ">>> Split-Token size: " + tokens.size());
        for (int j = 0; j < tokens.size(); j++) {
            Object next = tokens.get(j);
            if (next instanceof PDFOperator) {
                PDFOperator op = (PDFOperator) next;
                //Tj and TJ are the two operators that display
                //strings in a PDF
                //AH:
                //SkrivUt(4, "ArgumentList length: " + arguments.size());
                //>> AH* SkrivUt(4, "Operator anrop:" + OperatorCall( op, arguments ));
                // AH: Hr borde man gra ett anrop till StreamEngine!
                arguments = new LinkedList(); // Mste nollstlla argumenten
                // efter varje operator.
                if (op.getOperation().equals("Tj")) {
                    SkrivUt(4, "Tj hittad.");
                    //Tj takes one operator and that is the string
                    //to display so lets update that operator
                    COSString previous = (COSString) tokens.get(j - 1);
                    String string = previous.getString();
                    prevny = null;
                    bytestr = previous.getBytes();
                    strlen = string.length();
                    restretur = "";
                    SkrivUt(4, "Men: " + men);
                    SkrivUt(4, "string: " + string);
                    if (strlen > menlen) {
                        firsttime = true;
                        // Hela meningen r kortare n string.
                        // => Stega mening tills strlen < menlen.
                        while (strlen > menlen) // Tills strlen <= menlen.
                        { // Anvnder while eftersom string kan strcka sig ver flera meningar.
                          // I detta fall skall string kapas eftersom
                          // String innehller mer n en mening.
                          // Resterande delen skall sparas som en egen string.
                          // Minska strlen:
                            SkrivUt(4, "while strlen > menlen");
                            SkrivUt(4, "Men1: " + men);
                            SkrivUt(4, "string1: " + string);
                            byte[] prevbytestr = new byte[menlen];
                            for (int it = 0; it < menlen; it++) { // Ta fram den delstring som motsvarar slutet p meningen.
                                prevbytestr[it] = bytestr[it];
                            }
                            // Lagra tillbaka prevbytestr till posten.
                            prevny = new COSString(prevbytestr);
                            // prevny.reset();
                            // prevny.append( prevbytestr );
                            // Spara tillbaka kapad string till tokens.
                            if (firsttime) {
                                tokens.set(j - 1, prevny);
                                firsttime = false;
                            } else {
                                tokens.add(j + 1, Tj);
                                tokens.add(j + 1, prevny);
                                j = j + 2;
                            }
                            // Lgg in 0 g KVAR!
                            tempbstr = new byte[strlen - menlen];
                            // Kapa bort meningen frn string.
                            for (int it = menlen; it < strlen; it++) {
                                tempbstr[it - menlen] = bytestr[it];
                            }
                            bytestr = tempbstr; // spara resterande string.
                            string = string.substring(menlen, strlen);
                            strlen = strlen - menlen; // Nya lngden p nya string
                            // Stega index f mening. Kolla vektorlngd.
                            // Stega j s att nsta string lggs in rtt!

                            mindex++;
                            if (mindex >= mvektlen) {
                                sparaTokens(tokens);
                                mind = mindex;
                                return ""; // Fler sidor.
                            }
                            // Stega sjlva meningen.
                            men = (meningsvektor.get(mindex)).helameningen;
                            menlen = men.length();
                            SkrivUt(4, "Men2: " + men);
                            SkrivUt(4, "string2: " + string);
                        }
                        // Testa om strlen <= menlen.

                        if (strlen == menlen) {
                            // I detta fall skall data sparas tillbaka!
                            // Stega bda. Kolla frst om man r klar med sidan/ dokumentet.
                            // spara string.
                            SkrivUt(4, "strlen == menlen e while");
                            SkrivUt(4, "Men: " + men);
                            SkrivUt(4, "string: " + string);
                            prevny = new COSString(bytestr);
                            // prevny.reset();
                            // prevny.append( bytestr );
                            tokens.add(j + 1, Tj); // Spara Tj operatorn. Kolla index.
                            tokens.add(j + 1, prevny);
                            j = j + 3;
                            // Kolla vektorlngd innan kning.
                            mindex++;
                            if (mindex >= mvektlen) {
                                sparaTokens(tokens);
                                mind = mindex;
                                return ""; // Fler sidor.
                            }
                            men = (meningsvektor.get(mindex)).helameningen;
                            menlen = men.length();
                            // menlen = (meningsvektor.get(mindex)).length();
                            // Leta efter nsta text.
                        } else if (strlen < menlen) {
                            // I detta fall skall data sparas tillbaka!
                            // Hela string fr plats i meningen.
                            // Stega string. Behll mening. Kolla om slut p sidan.
                            SkrivUt(4, "strlen < menlen e while");
                            SkrivUt(4, "Men: " + men);
                            SkrivUt(4, "string: " + string);
                            prevny = new COSString(bytestr);
                            // prevny.reset();
                            // prevny.append( bytestr );
                            tokens.add(j + 1, Tj); // Spara Tj operatorn. Kolla index!
                            tokens.add(j + 1, prevny);
                            j = j + 3;
                            men = men.substring(strlen, menlen);
                            menlen = menlen - strlen;
                            // Kapa mening. Kolla om slut p sidan.
                            // Spara en ev rest om det r slut p sidan!
                            restretur = men;
                            SkrivUt(4, "restreturStr0: " + restretur);
                        }

                    } else if (strlen == menlen) {
                        // I detta fall skall INGA data sparas tillbaka!
                        // Stega bda. Kolla frst om man r klar med sidan/ dokumentet.
                        // Kolla vektorlngd innan kning.
                        SkrivUt(4, "strlen == menlen loopen");
                        SkrivUt(4, "Men: " + men);
                        SkrivUt(4, "string: " + string);
                        /* Sparande tillbaka till strukturen behvs inte hr!
                         * KOLLAS!
                        prevny = new COSString();
                        prevny.reset();
                        prevny.append( bytestr );
                        tokens.add(j, Tj); // Spara Tj operatorn. Kolla index.
                        tokens.add(j, prevny);
                        j = j+2;
                                
                         */
                        // Kolla vektorlngd innan kning.
                        mindex++;
                        if (mindex >= mvektlen) {
                            sparaTokens(tokens);
                            mind = mindex;
                            return ""; // Fler sidor.
                        }
                        men = (meningsvektor.get(mindex)).helameningen;
                        menlen = men.length();
                        // menlen = (meningsvektor.get(mindex)).length();
                        // Leta efter nsta text.
                    } else if (strlen < menlen) {
                        // I detta fall skall INGA data sparas tillbaka!
                        // Hela string fr plats i meningen.
                        // Stega string. Behll mening. Kolla om slut p sidan.
                        SkrivUt(4, "strlen < menlen loopen");
                        SkrivUt(4, "Men: " + men);
                        SkrivUt(4, "string: " + string);
                        /* Data skall inte  sparas tillbaka hr!
                        prevny = new COSString();
                        prevny.reset();
                        prevny.append( bytestr );
                        tokens.add(j, Tj); // Spara Tj operatorn. Kolla index.
                        tokens.add(j, prevny);
                        j = j+2;
                         *
                         */
                        men = men.substring(strlen, menlen);
                        menlen = menlen - strlen;
                        // Kapa mening. Kolla om slut p sidan.
                        // AH* Hr borde ett returvrde sttas om sist p sidan.
                        restretur = men;
                        SkrivUt(4, "restreturStr1: " + restretur);

                    }

                    // Kolla kommenterad kod.
                    // HTexten += string;
                    // string = string.replaceFirst( strToFind, message );
                    // previous.reset();
                    // previous.append( string.getBytes() );
                    // AH* Testa tillgg av kod.
                    /*
                    tokens.add(j-1, gop);
                    if (gray1)
                    {
                        tokens.add(j-1,cfloat1 );
                        gray1 = false;
                    } else
                    {
                        tokens.add(j-1, cfloat5);
                        gray1 = true;
                    }
                    j = j+2;
                            
                      */
                } else if (op.getOperation().equals("TJ")) {
                    SkrivUt(4, "TJ hittad.");
                    COSArray aktarray = new COSArray(); // Arbetsstrukturen
                    COSArray temparray = new COSArray(); // Arbetsstrukturen
                    COSArray nextarray = new COSArray();
                    kapad = false;
                    restretur = "";
                    int aktind = 0;
                    // fr den aktuella arrayen.
                    COSArray previous = (COSArray) tokens.get(j - 1);
                    firsttime = true;
                    for (int k = 0; k < previous.size(); k++) {
                        Object arrElement = previous.getObject(k);
                        if (arrElement instanceof COSString) {
                            COSString cosString = (COSString) arrElement;
                            String string = cosString.getString();
                            bytestr = ((COSString) arrElement).getBytes();
                            strlen = string.length();
                            prevny = null;
                            SkrivUt(4, "Men: " + men);
                            SkrivUt(4, "string: " + string);
                            if (strlen > menlen) {
                                // Hela meningen r kortare n string.
                                // => Stega mening tills strlen < menlen.
                                // firsttime = true; // Frsta gngen i while loopen.
                                while (strlen > menlen) // Tills strlen <= menlen.
                                { // Anvnder while eftersom string kan strcka sig ver flera meningar.
                                  // I detta fall skall string o array kapas eftersom
                                  // String innehller mer n en mening.
                                  // Resterande delen skall sparas som en egen string.
                                  // Minska strlen:
                                    SkrivUt(4, "TJ while strlen > menlen");
                                    SkrivUt(4, "Men1: " + men);
                                    SkrivUt(4, "string1: " + string);
                                    byte[] prevbytestr = new byte[menlen];
                                    for (int it = 0; it < menlen; it++) { // Ta fram den delstring som motsvarar slutet p meningen.
                                        prevbytestr[it] = bytestr[it];
                                    }
                                    // Lagra tillbaka prevbytestr till posten.
                                    // Sparandet behver modifieras hr!
                                    prevny = new COSString(prevbytestr);
                                    aktarray.add(prevny); // array som avslutas.
                                    //prevny.reset();
                                    // prevny.append( prevbytestr );
                                    // Spara tillbaka token:
                                    // modifiera nedanstende: Fr korrekt sparande.
                                    // Kopiera en ev rest av array till nextarray.
                                    // Detta utfrs alltid vid kapning.
                                    nextarray.clear(); // Rensa ev tidigare data.

                                    // nextarray.add(prevrest); Resten av nuvarande string.

                                    for (int n = k + 1; n < previous.size(); n++) {
                                        nextarray.add(previous.get(n));
                                    } // Om slut, s kan nextarray vara tom!
                                    if (firsttime) // Modifiera existerande COSArray.
                                    {
                                        SkrivUt(4, "Firsttime = true.");
                                        temparray = arraycopy(aktarray);
                                        tokens.set(j - 1, temparray); // OK nu eftersom rest r sparad.
                                        SkrivUt(4, "token.SET . " + (j - 1) + " " + aktarray.toString());
                                        // tokens.add(j, TJ); Finns ju redan p plats!
                                        firsttime = false;

                                    } else // Skapa en ny array och lgg in med TJ.
                                    {
                                        SkrivUt(4, "Firsttime = false.");
                                        tokens.add(j + 1, TJ);
                                        SkrivUt(4, "token.add1 . " + (j + 1) + " " + TJ.toString());
                                        temparray = arraycopy(aktarray);
                                        ;
                                        tokens.add(j + 1, temparray);
                                        SkrivUt(4, "token.add1 . " + (j + 1) + " " + temparray.toString());
                                        j = j + 2; // AH* ndrad.
                                    }
                                    aktarray.clear(); // Rensa till ny array.
                                    aktind = 0;
                                    // Lgg in 0 g KVAR!
                                    // Stega index f mening. Kolla vektorlngd.
                                    // Stega j s att nsta string lggs in rtt!
                                    // >> Stega kod flyttad hrifrn!

                                    tempbstr = new byte[strlen - menlen];
                                    // Kapa bort meningen frn string.
                                    for (int it = menlen; it < strlen; it++) {
                                        tempbstr[it - menlen] = bytestr[it];
                                    }
                                    bytestr = tempbstr; // spara resterande string.
                                    string = string.substring(menlen, strlen);
                                    strlen = strlen - menlen; // Nya lngden p nya string

                                    mindex++;
                                    if (mindex >= mvektlen) { // Skall ngot mer utfras innan sparande?
                                        sparaTokens(tokens);
                                        mind = mindex;
                                        return ""; // Fler sidor.
                                    } // Fler sidor.
                                      // Stega sjlva meningen.
                                    men = (meningsvektor.get(mindex)).helameningen;
                                    menlen = men.length();
                                    SkrivUt(4, "Men2: " + men);
                                    SkrivUt(4, "string2: " + string);
                                }
                                // Fortstt efter while.
                                // Testa om strlen <= menlen.

                                if (strlen == menlen) {
                                    // Stega bde string och men.
                                    // Kolla om array slut. else kapa array.
                                    // Kolla frst om man r klar med sidan/ dokumentet.
                                    // spara string.
                                    SkrivUt(4, "TJ strlen == menlen e while");
                                    SkrivUt(4, "Men: " + men);
                                    SkrivUt(4, "string: " + string);
                                    // Sparandet behver modifieras hr:
                                    prevny = new COSString(bytestr);
                                    aktarray.add(prevny);
                                    // prevny.reset();
                                    // prevny.append( bytestr );
                                    temparray = arraycopy(aktarray);
                                    tokens.add(j + 1, TJ); // Spara Tj operatorn. Kolla index.
                                    SkrivUt(4, "token.add2 ." + (j + 1) + " " + TJ.toString());
                                    tokens.add(j + 1, temparray);
                                    SkrivUt(4, "token.add2 ." + (j + 1) + " " + temparray.toString());
                                    j = j + 2;
                                    aktarray.clear();
                                    aktind = 0;
                                    // Kolla vektorlngd innan kning.
                                    mindex++;
                                    if (mindex >= mvektlen) {
                                        sparaTokens(tokens);
                                        mind = mindex;
                                        return ""; // Fler sidor.
                                    }
                                    men = (meningsvektor.get(mindex)).helameningen;
                                    menlen = men.length();
                                    // menlen = (meningsvektor.get(mindex)).length();
                                    // Leta efter nsta text.
                                } else if (strlen < menlen) {
                                    // Hela string fr plats i meningen.
                                    // Dvs splittra inte hr! Bygg sparade data.
                                    // Stega string. Behll mening. Kolla om slut p sidan.
                                    SkrivUt(4, "TJ strlen < menlen e while");
                                    SkrivUt(4, "Men: " + men);
                                    SkrivUt(4, "string: " + string);
                                    SkrivUt(4, ">> bytestr: " + bytestr.toString());
                                    // Sparandet behver modifieras hr!
                                    prevny = new COSString(bytestr);
                                    aktarray.add(prevny);
                                    aktind++;
                                    // Spara data hr om det r sista i arrayen!
                                    if (firsttime == false)
                                        if ((k >= previous.size() - 1) || ((k >= previous.size() - 2)
                                                && (!(previous.get(k + 1) instanceof COSString)))) {
                                            SkrivUt(4, "Spara i TJ strlen < menlen loopen.");
                                            // prevny = new COSString( bytestr );
                                            // aktarray.add(prevny);
                                            // aktind++;
                                            // prevny.reset();
                                            // prevny.append( bytestr );
                                            tokens.add(j + 1, TJ); // Spara Tj operatorn. Kolla index.
                                            SkrivUt(4, "token.add4 ." + (j + 1) + " " + TJ.toString());
                                            temparray = arraycopy(aktarray);
                                            tokens.add(j + 1, temparray);
                                            SkrivUt(4, "token.add4 ." + (j + 1) + " " + temparray.toString());
                                            j = j + 3;
                                            aktarray.clear();
                                            aktind = 0;
                                        }

                                    // INTE spara data hr!?
                                    // prevny.reset();
                                    // prevny.append( bytestr );
                                    /* tokens.add(j+1, TJ); // Spara TJ operatorn. Kolla index!
                                    tokens.add(j+1, prevny);
                                    j=j+3;
                                     * 
                                     */
                                    men = men.substring(strlen, menlen);
                                    menlen = menlen - strlen;
                                    // Kapa mening. Kolla om slut p sidan.
                                    // AH* Hr borde ett returvrde sttas om sist p sidan.
                                    restretur = men;
                                    SkrivUt(4, "restretur0: " + restretur);
                                }

                            } else if (strlen == menlen) {
                                // Stega bda. Kolla frst om man r klar med sidan/ dokumentet.
                                // Om det r slut p arrayen ocks behver ingen splittring gras!
                                // Else splittra arrayen!
                                // Kolla vektorlngd innan kning.
                                SkrivUt(4, "TJ strlen == menlen loopen");
                                SkrivUt(4, "Men: " + men);
                                SkrivUt(4, "string: " + string);
                                // Ansats: Skall inte spara tillbaka data hr!
                                // >> Data skall sparas bara om detta INTE r sista i arrayen!
                                // Om det r sista i arrayen skall det INTE sparas! D finns
                                // den ju redan!
                                // Borde testa om alla efterkommande != COSString!
                                // Tidigare kod:
                                // if (!((k >= previous.size()-1) ||
                                //        ((k >= previous.size()-2) &&
                                //       (! (previous.get( k+1 ) instanceof COSString)))))
                                // Behver inte vara i slutet av arrayen fr att kapa hr!
                                // Skall spara data till array alltid hr!?
                                // Kan data redan vara sparade hr?
                                //if // Villkor fr sparandet.
                                //{
                                SkrivUt(4, "Spara i TJ strlen== menlen loopen.");
                                prevny = new COSString(bytestr);
                                aktarray.add(prevny);
                                // aktind++;
                                // prevny.reset();
                                // prevny.append( bytestr );
                                if (firsttime) // Testa denna!
                                {
                                    temparray = arraycopy(aktarray);
                                    tokens.set(j - 1, temparray);
                                    SkrivUt(4, "token.SET3 ." + (j - 1) + " " + temparray.toString());
                                    firsttime = false;
                                } else {
                                    tokens.add(j + 1, TJ); // Spara Tj operatorn. Kolla index.
                                    SkrivUt(4, "token.add3 ." + (j + 1) + " " + TJ.toString());
                                    temparray = arraycopy(aktarray);
                                    tokens.add(j + 1, temparray);
                                    SkrivUt(4, "token.add3 ." + (j + 1) + " " + temparray.toString());
                                    j = j + 2;
                                }
                                aktarray.clear();
                                aktind = 0;
                                //} else SkrivUt(4, "Sparar INTE data i TJ strlen == menlen loopen.");
                                // Kolla vektorlngd innan kning.
                                mindex++;
                                if (mindex >= mvektlen) {
                                    sparaTokens(tokens);
                                    mind = mindex;
                                    return ""; // Fler sidor.
                                }
                                men = (meningsvektor.get(mindex)).helameningen;
                                menlen = men.length();
                                // menlen = (meningsvektor.get(mindex)).length();
                                // Leta efter nsta text.
                            } else if (strlen < menlen) {
                                // Hela string fr plats i meningen.
                                // Stega string. Behll mening. Kolla om slut p sidan.
                                // Behver inte splittra arrayen hr!
                                // Kan behva spara denna string till arbetsarrayen.
                                SkrivUt(4, "TJ strlen < menlen loopen");
                                SkrivUt(4, "Men: " + men);
                                SkrivUt(4, "string: " + string);
                                SkrivUt(4, ">> bytestr: " + bytestr.toString());
                                // Ansats: Spara inte tillbaka data hr!
                                prevny = new COSString(bytestr);
                                aktarray.add(prevny);
                                aktind++;
                                // prevny.reset();
                                // prevny.append( bytestr );
                                /*
                                tokens.add(j, TJ); // Spara Tj operatorn. Kolla index.
                                tokens.add(j, prevny);
                                j = j+2;
                                 *
                                 */
                                // Frn (while strlen < menlen.
                                // Om firsttime == true s skall data INTE sparas eftersom den
                                // redan r sparad.
                                // Skall denna kod vara med?
                                if (firsttime == false)
                                    if ((k >= previous.size() - 1) || ((k >= previous.size() - 2)
                                            && (!(previous.get(k + 1) instanceof COSString)))) {
                                        SkrivUt(4, "Spara i TJ strlen < menlen loopen.");
                                        // prevny = new COSString( bytestr );
                                        // aktarray.add(prevny);
                                        // aktind++;
                                        // prevny.reset();
                                        // prevny.append( bytestr );
                                        tokens.add(j + 1, TJ); // Spara Tj operatorn. Kolla index.
                                        SkrivUt(4, "token.add5 ." + (j + 1) + " " + TJ.toString());
                                        temparray = arraycopy(aktarray);
                                        tokens.add(j + 1, temparray);
                                        SkrivUt(4, "token.add5 ." + (j + 1) + " " + temparray.toString());
                                        j = j + 2;
                                        aktarray.clear();
                                        aktind = 0;
                                    }

                                men = men.substring(strlen, menlen);
                                menlen = menlen - strlen;
                                // AH* Hr borde ett returvrde sttas om sist p sidan.
                                restretur = men;
                                SkrivUt(4, "restretur0: " + restretur);
                                // Kapa mening. Kolla om slut p sidan.

                            }
                            // HTexten += string;
                            // string = string.replaceFirst( strToFind, message );
                            // cosString.reset();
                            // cosString.append( string.getBytes() );
                        } else if (arrElement instanceof COSNumber) {
                            // Testa om det finns nr.
                            // Spara arrElement i aktarray!
                            // Tester visar att det r COSNumber som hanteras!
                            aktarray.add((COSNumber) arrElement);
                            aktind++;
                            SkrivUt(4, "COSNumber i splitMeningar.");
                        } else if (arrElement instanceof COSInteger) {
                            // Testa om det finns int.
                            // Spara arrElement i aktarray!
                            aktarray.add((COSInteger) arrElement);
                            aktind++;
                            SkrivUt(4, "COSInteger i splitMeningar.");
                        } else if (arrElement instanceof COSFloat) {
                            // Testa om det finns float.
                            // Spara arrElement i aktarray!
                            aktarray.add((COSFloat) arrElement);
                            aktind++;
                            SkrivUt(4, "COSFloat i splitMeningar.");
                        } else {
                            // Spara data till aktarray. Kolla vilken typ det r!
                            SkrivUt(4, "Oknd typ arrel i split: " + arrElement.toString());
                        }
                    }
                    // AH: Tillagd kod!
                    /*
                    tokens.add(j-1, gop);
                    if (gray1)
                    {
                        tokens.add(j-1,cfloat1 );
                        gray1 = false;
                    } else
                    {
                        tokens.add(j-1, cfloat5);
                        gray1 = true;
                    }
                    j = j+2;
                    */
                }
            } else // Inte PDFOperator, samla argument!
            {
                if (next instanceof COSBase) {
                    arguments.add(next);
                    //SkrivUt(4, "COSBase " + next.toString());
                } else {
                    SkrivUt(4, "next inte rtt typ!");
                }
            }
        }
        //now that the tokens are updated we will replace the
        //page content stream.

        SkrivUt(4, ">>> Fre spara tokens i splitMeningar.");

        PDStream updatedStream = new PDStream(doc1);
        OutputStream out = updatedStream.createOutputStream();
        ContentStreamWriter tokenWriter = new ContentStreamWriter(out);
        tokenWriter.writeTokens(tokens);
        page1.setContents(updatedStream);

        SkrivUt(4, ">>> Efter spara tokens i splitMeningar.");

    } catch (java.io.IOException ioe) {
        SkrivUt(0, "Exception i getHelaTexten.");
    }
    // Sparad skrpkod:
    // cosStream.setStreamTokens( tokens );
    // tokens = cosStream.getStreamTokens();
    mind = mindex;
    // Borde spara tokens hr!?
    // SkrivUt(4, "restretur: " + restretur);
    // SkrivUt(4, "Splitmeningar, data efter split.");
    // listTokens( tokens ); // Data innan split.
    return restretur;
}

From source file:com.santaanna.friendlyreader.pdfstod.pdfstod3.ReplaceStringStreamEngine.java

License:Apache License

public String byggStrukturer(String reststr, COSStream cosStream, int pageind) {
    SkrivUt(4, "Frst i byggstrukturer.");
    // Anvnd meningsvektor fr att hmta meningar.
    // Metoden rknar bara tecknen i string och mening och antar att de r synkade
    // i vrigt./*w  w w .  j av  a2s.  com*/
    // ShowText Tj = new ShowText(); // Tj
    // ShowTextGlyph TJ = new ShowTextGlyph(); // TJ
    int mindex = mind;
    PDFOperator Tj = PDFOperator.getOperator("Tj");
    PDFOperator TJ = PDFOperator.getOperator("TJ");
    String restretur = ""; // Resterande text p meningsrad. En arbetsstruktur.
    String men; // Aktuell meningsstruktur.
    if (reststr != "")
        men = reststr;
    else
        men = meningsvektor.get(mindex).helameningen;
    // terskrivet Hit!
    int menlen = men.length(); // Lngden p den aktuella meningen.
    int mvektlen = meningsvektor.size(); // Storleken p vektorn.
    SEmeningsdel semendel = new SEmeningsdel();
    SEmening semen = new SEmening();
    byte[] bytestr; // string representerad som byte[]
    byte[] tempbstr; // byte[] fr temporr lagring.
    int strlen; // Lngden p den aktuella stringen.
    COSString prevny = null;
    boolean firsttime = true;
    boolean kapad = false;
    setb = new SETextBlock();
    SECosstr secostr; // Aktuell COSString struktur.
    Vector<SEArrayIndKlass> newCarray = null; // Aktuell COSArray.
    SEArrayNumber seaik = null; // Aktuellt nummer i COSArray
    List tokens = null;

    try {
        tokens = cosStream.getStreamTokens(); // AH* Detta skrivs ver i nsta steg.
        // tokens = pageTokens.get( pageind ); Fungerade tidigare.
        SkrivUt(4, "Frst i byggstrukturer, listToken.");
        listTokens(tokens); // Data innan byggstrukturer.
        // List tokens = getTokenList();// AH* parser.getTokens(); Tidigare hmtning av lista.
        // Dvs hmta INTE tokens frn den parsade filen. Anvnd tidigare data.
        LinkedList arguments = new LinkedList(); // AH* argumenten till operatorn.
        SkrivUt(4, ">>> Split-Token size: " + tokens.size());
        for (int j = 0; j < tokens.size(); j++) {
            Object next = tokens.get(j);
            if (next instanceof PDFOperator) {
                PDFOperator op = (PDFOperator) next;
                //Tj and TJ are the two operators that display
                //strings in a PDF
                //AH:
                //SkrivUt(4, "ArgumentList length: " + arguments.size());
                //>> AH* SkrivUt(4, "Operator anrop:" + OperatorCall( op, arguments ));
                // AH: Hr borde man gra ett anrop till StreamEngine!
                arguments = new LinkedList(); // Mste nollstlla argumenten
                // efter varje operator.
                if (op.getOperation().equals("Tj")) {
                    SkrivUt(4, "Tj hittad.");
                    setb = new SETextBlock();
                    setb.IsArray = false;
                    setb.pagenr = tbpagenr;
                    setb.index = j;

                    //Tj takes one operator and that is the string
                    //to display so lets update that operator
                    COSString previous = (COSString) tokens.get(j - 1);
                    String string = previous.getString();
                    secostr = new SECosstr(mindex, 0, string);

                    setb.cstr = secostr;
                    TBVector.add(setb);

                    semendel = new SEmeningsdel();
                    semendel.pagenr = tbpagenr;
                    semendel.tb = TBVector.size();
                    semendel.isarr = false;
                    semendel.arrind = 0;
                    semendel.deltext = string;
                    semen = meningsvektor.get(mindex);
                    semen.allaDelar.add(semendel);
                    // Kolla om detta rcker eller om det ocks skall
                    // tilldelas till meningsvektor igen!

                    prevny = null;
                    bytestr = previous.getBytes();
                    strlen = string.length();
                    restretur = "";
                    SkrivUt(4, "Men: " + men);
                    SkrivUt(4, "string: " + string);
                    if (strlen > menlen) {
                        SkrivUt(4, "**** strlen > menlen i byggstrukturer.");
                        firsttime = true;
                        // Hela meningen r kortare n string.
                        // => Stega mening tills strlen < menlen.
                        while (strlen > menlen) // Tills strlen <= menlen.
                        { // Anvnder while eftersom string kan strcka sig ver flera meningar.
                          // I detta fall skall string kapas eftersom
                          // String innehller mer n en mening.
                          // Resterande delen skall sparas som en egen string.
                          // Minska strlen:
                            SkrivUt(4, "while strlen > menlen");
                            SkrivUt(4, "Men1: " + men);
                            SkrivUt(4, "string1: " + string);
                            byte[] prevbytestr = new byte[menlen];
                            for (int it = 0; it < menlen; it++) { // Ta fram den delstring som motsvarar slutet p meningen.
                                prevbytestr[it] = bytestr[it];
                            }
                            // Lagra tillbaka prevbytestr till posten.
                            prevny = new COSString(prevbytestr);
                            // prevny.reset();
                            // prevny.append( prevbytestr );
                            // Spara tillbaka kapad string till tokens.
                            if (firsttime) {
                                tokens.set(j - 1, prevny);
                                firsttime = false;
                            } else {
                                tokens.add(j + 1, Tj);
                                tokens.add(j + 1, prevny);
                                j = j + 2;
                            }
                            // Lgg in 0 g KVAR!
                            tempbstr = new byte[strlen - menlen];
                            // Kapa bort meningen frn string.
                            for (int it = menlen; it < strlen; it++) {
                                tempbstr[it - menlen] = bytestr[it];
                            }
                            bytestr = tempbstr; // spara resterande string.
                            string = string.substring(menlen, strlen);
                            strlen = strlen - menlen; // Nya lngden p nya string
                            // Stega index f mening. Kolla vektorlngd.
                            // Stega j s att nsta string lggs in rtt!

                            mindex++;
                            if (mindex >= mvektlen) {
                                sparaTokens(tokens);
                                mind = mindex;
                                return ""; // Fler sidor.
                            }
                            // Stega sjlva meningen.
                            men = (meningsvektor.get(mindex)).helameningen;
                            menlen = men.length();
                            SkrivUt(4, "Men2: " + men);
                            SkrivUt(4, "string2: " + string);
                        }
                        // Testa om strlen <= menlen.

                        if (strlen == menlen) {
                            // I detta fall skall data sparas tillbaka!
                            // Stega bda. Kolla frst om man r klar med sidan/ dokumentet.
                            // spara string.
                            SkrivUt(4, "strlen == menlen e while");
                            SkrivUt(4, "Men: " + men);
                            SkrivUt(4, "string: " + string);
                            prevny = new COSString(bytestr);
                            // prevny.reset();
                            // prevny.append( bytestr );
                            tokens.add(j + 1, Tj); // Spara Tj operatorn. Kolla index.
                            tokens.add(j + 1, prevny);
                            j = j + 3;
                            // Kolla vektorlngd innan kning.
                            mindex++;
                            if (mindex >= mvektlen) {
                                sparaTokens(tokens);
                                mind = mindex;
                                return ""; // Fler sidor.
                            }
                            men = (meningsvektor.get(mindex)).helameningen;
                            menlen = men.length();
                            // menlen = (meningsvektor.get(mindex)).length();
                            // Leta efter nsta text.
                        } else if (strlen < menlen) {
                            // I detta fall skall data sparas tillbaka!
                            // Hela string fr plats i meningen.
                            // Stega string. Behll mening. Kolla om slut p sidan.
                            SkrivUt(4, "strlen < menlen e while");
                            SkrivUt(4, "Men: " + men);
                            SkrivUt(4, "string: " + string);
                            prevny = new COSString(bytestr);
                            // prevny.reset();
                            // prevny.append( bytestr );
                            tokens.add(j + 1, Tj); // Spara Tj operatorn. Kolla index!
                            tokens.add(j + 1, prevny);
                            j = j + 3;
                            men = men.substring(strlen, menlen);
                            menlen = menlen - strlen;
                            // Kapa mening. Kolla om slut p sidan.
                            // Spara en ev rest om det r slut p sidan!
                            restretur = men;
                            SkrivUt(4, "restreturStr0: " + restretur);
                        }

                    } else if (strlen == menlen) {
                        // I detta fall skall INGA data sparas tillbaka!
                        // Stega bda. Kolla frst om man r klar med sidan/ dokumentet.
                        // Kolla vektorlngd innan kning.
                        SkrivUt(4, "strlen == menlen loopen");
                        SkrivUt(4, "Men: " + men);
                        SkrivUt(4, "string: " + string);
                        /* Sparande tillbaka till strukturen behvs inte hr!
                         * KOLLAS!
                        prevny = new COSString();
                        prevny.reset();
                        prevny.append( bytestr );
                        tokens.add(j, Tj); // Spara Tj operatorn. Kolla index.
                        tokens.add(j, prevny);
                        j = j+2;
                                
                         */
                        // Kolla vektorlngd innan kning.
                        mindex++;
                        if (mindex >= mvektlen) {
                            sparaTokens(tokens);
                            mind = mindex;
                            return ""; // Fler sidor.
                        }
                        men = (meningsvektor.get(mindex)).helameningen;
                        menlen = men.length();
                        // menlen = (meningsvektor.get(mindex)).length();
                        // Leta efter nsta text.
                    } else if (strlen < menlen) {
                        // I detta fall skall INGA data sparas tillbaka!
                        // Hela string fr plats i meningen.
                        // Stega string. Behll mening. Kolla om slut p sidan.
                        SkrivUt(4, "strlen < menlen loopen");
                        SkrivUt(4, "Men: " + men);
                        SkrivUt(4, "string: " + string);
                        /* Data skall inte  sparas tillbaka hr!
                        prevny = new COSString();
                        prevny.reset();
                        prevny.append( bytestr );
                        tokens.add(j, Tj); // Spara Tj operatorn. Kolla index.
                        tokens.add(j, prevny);
                        j = j+2;
                         *
                         */
                        men = men.substring(strlen, menlen);
                        menlen = menlen - strlen;
                        // Kapa mening. Kolla om slut p sidan.
                        // AH* Hr borde ett returvrde sttas om sist p sidan.
                        restretur = men;
                        SkrivUt(4, "restreturStr1: " + restretur);

                    }

                    // Kolla kommenterad kod.
                    // HTexten += string;
                    // string = string.replaceFirst( strToFind, message );
                    // previous.reset();
                    // previous.append( string.getBytes() );
                    // AH* Testa tillgg av kod.
                    /*
                    tokens.add(j-1, gop);
                    if (gray1)
                    {
                        tokens.add(j-1,cfloat1 );
                        gray1 = false;
                    } else
                    {
                        tokens.add(j-1, cfloat5);
                        gray1 = true;
                    }
                    j = j+2;
                            
                      */
                } else if (op.getOperation().equals("TJ")) {
                    SkrivUt(4, "TJ hittad.");
                    setb = new SETextBlock();
                    setb.IsArray = true;
                    setb.pagenr = tbpagenr;
                    setb.index = j;
                    TBVector.add(setb);
                    newCarray = new Vector<SEArrayIndKlass>(); // COSArray
                    COSArray aktarray = new COSArray(); // Arbetsstrukturen
                    COSArray temparray = new COSArray(); // Arbetsstrukturen
                    COSArray nextarray = new COSArray();
                    kapad = false;
                    restretur = "";
                    int aktind = 0;
                    // fr den aktuella arrayen.
                    COSArray previous = (COSArray) tokens.get(j - 1);
                    firsttime = true;
                    for (int k = 0; k < previous.size(); k++) {
                        Object arrElement = previous.getObject(k);
                        if (arrElement instanceof COSString) {
                            COSString cosString = (COSString) arrElement;
                            String string = cosString.getString();
                            bytestr = ((COSString) arrElement).getBytes();
                            strlen = string.length();
                            prevny = null;
                            // Datastrukturer byggs upp:
                            secostr = new SECosstr(mindex, k, string);
                            newCarray.add(secostr);
                            setb.Carray = newCarray; // COSArray data.
                            SkrivUt(4, "Men: " + men);
                            SkrivUt(4, "string: " + string);

                            semendel = new SEmeningsdel();
                            semendel.pagenr = tbpagenr;
                            semendel.tb = TBVector.size();
                            semendel.isarr = true;
                            semendel.arrind = k;
                            semendel.deltext = string;
                            semen = meningsvektor.get(mindex);
                            semen.allaDelar.add(semendel);
                            // Kolla om detta rcker eller om det ocks skall
                            // tilldelas till meningsvektor igen!

                            if (strlen > menlen) {
                                SkrivUt(4, "**** strlen > menlen i byggstrukturer.");
                                // Hela meningen r kortare n string.
                                // => Stega mening tills strlen < menlen.
                                // firsttime = true; // Frsta gngen i while loopen.
                                while (strlen > menlen) // Tills strlen <= menlen.
                                { // Anvnder while eftersom string kan strcka sig ver flera meningar.
                                  // I detta fall skall string o array kapas eftersom
                                  // String innehller mer n en mening.
                                  // Resterande delen skall sparas som en egen string.
                                  // Minska strlen:
                                    SkrivUt(4, "TJ while strlen > menlen");
                                    SkrivUt(4, "Men1: " + men);
                                    SkrivUt(4, "string1: " + string);
                                    byte[] prevbytestr = new byte[menlen];
                                    for (int it = 0; it < menlen; it++) { // Ta fram den delstring som motsvarar slutet p meningen.
                                        prevbytestr[it] = bytestr[it];
                                    }
                                    // Lagra tillbaka prevbytestr till posten.
                                    // Sparandet behver modifieras hr!
                                    prevny = new COSString(prevbytestr);
                                    aktarray.add(prevny); // array som avslutas.
                                    //prevny.reset();
                                    // prevny.append( prevbytestr );
                                    // Spara tillbaka token:
                                    // modifiera nedanstende: Fr korrekt sparande.
                                    // Kopiera en ev rest av array till nextarray.
                                    // Detta utfrs alltid vid kapning.
                                    nextarray.clear(); // Rensa ev tidigare data.

                                    // nextarray.add(prevrest); Resten av nuvarande string.

                                    for (int n = k + 1; n < previous.size(); n++) {
                                        nextarray.add(previous.get(n));
                                    } // Om slut, s kan nextarray vara tom!
                                    if (firsttime) // Modifiera existerande COSArray.
                                    {
                                        SkrivUt(4, "Firsttime = true.");
                                        temparray = arraycopy(aktarray);
                                        tokens.set(j - 1, temparray); // OK nu eftersom rest r sparad.
                                        SkrivUt(4, "token.SET . " + (j - 1) + " " + aktarray.toString());
                                        // tokens.add(j, TJ); Finns ju redan p plats!
                                        firsttime = false;

                                    } else // Skapa en ny array och lgg in med TJ.
                                    {
                                        SkrivUt(4, "Firsttime = false.");
                                        tokens.add(j + 1, TJ);
                                        SkrivUt(4, "token.add1 . " + (j + 1) + " " + TJ.toString());
                                        temparray = arraycopy(aktarray);
                                        ;
                                        tokens.add(j + 1, temparray);
                                        SkrivUt(4, "token.add1 . " + (j + 1) + " " + temparray.toString());
                                        j = j + 2; // AH* ndrad.
                                    }
                                    aktarray.clear(); // Rensa till ny array.
                                    aktind = 0;
                                    // Lgg in 0 g KVAR!
                                    // Stega index f mening. Kolla vektorlngd.
                                    // Stega j s att nsta string lggs in rtt!
                                    // >> Stega kod flyttad hrifrn!

                                    tempbstr = new byte[strlen - menlen];
                                    // Kapa bort meningen frn string.
                                    for (int it = menlen; it < strlen; it++) {
                                        tempbstr[it - menlen] = bytestr[it];
                                    }
                                    bytestr = tempbstr; // spara resterande string.
                                    string = string.substring(menlen, strlen);
                                    strlen = strlen - menlen; // Nya lngden p nya string

                                    mindex++;
                                    if (mindex >= mvektlen) { // Skall ngot mer utfras innan sparande?
                                        sparaTokens(tokens);
                                        mind = mindex;
                                        return ""; // Fler sidor.
                                    } // Fler sidor.
                                      // Stega sjlva meningen.
                                    men = (meningsvektor.get(mindex)).helameningen;
                                    menlen = men.length();
                                    SkrivUt(4, "Men2: " + men);
                                    SkrivUt(4, "string2: " + string);
                                }
                                // Fortstt efter while.
                                // Testa om strlen <= menlen.

                                if (strlen == menlen) {
                                    // Stega bde string och men.
                                    // Kolla om array slut. else kapa array.
                                    // Kolla frst om man r klar med sidan/ dokumentet.
                                    // spara string.
                                    SkrivUt(4, "TJ strlen == menlen e while");
                                    SkrivUt(4, "Men: " + men);
                                    SkrivUt(4, "string: " + string);
                                    // Sparandet behver modifieras hr:
                                    prevny = new COSString(bytestr);
                                    aktarray.add(prevny);
                                    // prevny.reset();
                                    // prevny.append( bytestr );
                                    temparray = arraycopy(aktarray);
                                    tokens.add(j + 1, TJ); // Spara Tj operatorn. Kolla index.
                                    SkrivUt(4, "token.add2 ." + (j + 1) + " " + TJ.toString());
                                    tokens.add(j + 1, temparray);
                                    SkrivUt(4, "token.add2 ." + (j + 1) + " " + temparray.toString());
                                    j = j + 2;
                                    aktarray.clear();
                                    aktind = 0;
                                    // Kolla vektorlngd innan kning.
                                    mindex++;
                                    if (mindex >= mvektlen) {
                                        sparaTokens(tokens);
                                        mind = mindex;
                                        return ""; // Fler sidor.
                                    }
                                    men = (meningsvektor.get(mindex)).helameningen;
                                    menlen = men.length();
                                    // menlen = (meningsvektor.get(mindex)).length();
                                    // Leta efter nsta text.
                                } else if (strlen < menlen) {
                                    // Hela string fr plats i meningen.
                                    // Dvs splittra inte hr! Bygg sparade data.
                                    // Stega string. Behll mening. Kolla om slut p sidan.
                                    SkrivUt(4, "TJ strlen < menlen e while");
                                    SkrivUt(4, "Men: " + men);
                                    SkrivUt(4, "string: " + string);
                                    SkrivUt(4, ">> bytestr: " + bytestr.toString());
                                    // Sparandet behver modifieras hr!
                                    prevny = new COSString(bytestr);
                                    aktarray.add(prevny);
                                    aktind++;
                                    // Spara data hr om det r sista i arrayen!
                                    if (firsttime == false)
                                        if ((k >= previous.size() - 1) || ((k >= previous.size() - 2)
                                                && (!(previous.get(k + 1) instanceof COSString)))) {
                                            SkrivUt(4, "Spara i TJ strlen < menlen loopen.");
                                            // prevny = new COSString( bytestr );
                                            // aktarray.add(prevny);
                                            // aktind++;
                                            // prevny.reset();
                                            // prevny.append( bytestr );
                                            tokens.add(j + 1, TJ); // Spara Tj operatorn. Kolla index.
                                            SkrivUt(4, "token.add4 ." + (j + 1) + " " + TJ.toString());
                                            temparray = arraycopy(aktarray);
                                            tokens.add(j + 1, temparray);
                                            SkrivUt(4, "token.add4 ." + (j + 1) + " " + temparray.toString());
                                            j = j + 3;
                                            aktarray.clear();
                                            aktind = 0;
                                        }

                                    // INTE spara data hr!?
                                    // prevny.reset();
                                    // prevny.append( bytestr );
                                    /* tokens.add(j+1, TJ); // Spara TJ operatorn. Kolla index!
                                    tokens.add(j+1, prevny);
                                    j=j+3;
                                     *
                                     */
                                    men = men.substring(strlen, menlen);
                                    menlen = menlen - strlen;
                                    // Kapa mening. Kolla om slut p sidan.
                                    // AH* Hr borde ett returvrde sttas om sist p sidan.
                                    restretur = men;
                                    SkrivUt(4, "restretur0: " + restretur);
                                }

                            } else if (strlen == menlen) {
                                // Stega bda. Kolla frst om man r klar med sidan/ dokumentet.
                                // Om det r slut p arrayen ocks behver ingen splittring gras!
                                // Else splittra arrayen!
                                // Kolla vektorlngd innan kning.
                                SkrivUt(4, "TJ strlen == menlen loopen");
                                SkrivUt(4, "Men: " + men);
                                SkrivUt(4, "string: " + string);
                                // Ansats: Skall inte spara tillbaka data hr!
                                // >> Data skall sparas bara om detta INTE r sista i arrayen!
                                // Om det r sista i arrayen skall det INTE sparas! D finns
                                // den ju redan!
                                // Borde testa om alla efterkommande != COSString!
                                // Tidigare kod:
                                // if (!((k >= previous.size()-1) ||
                                //        ((k >= previous.size()-2) &&
                                //       (! (previous.get( k+1 ) instanceof COSString)))))
                                // Behver inte vara i slutet av arrayen fr att kapa hr!
                                // Skall spara data till array alltid hr!?
                                // Kan data redan vara sparade hr?
                                //if // Villkor fr sparandet.
                                //{
                                SkrivUt(4, "Spara i TJ strlen== menlen loopen.");
                                prevny = new COSString(bytestr);
                                aktarray.add(prevny);
                                // aktind++;
                                // prevny.reset();
                                // prevny.append( bytestr );
                                if (firsttime) // Testa denna!
                                {
                                    temparray = arraycopy(aktarray);
                                    tokens.set(j - 1, temparray);
                                    SkrivUt(4, "token.SET3 ." + (j - 1) + " " + temparray.toString());
                                    firsttime = false;
                                } else {
                                    tokens.add(j + 1, TJ); // Spara Tj operatorn. Kolla index.
                                    SkrivUt(4, "token.add3 ." + (j + 1) + " " + TJ.toString());
                                    temparray = arraycopy(aktarray);
                                    tokens.add(j + 1, temparray);
                                    SkrivUt(4, "token.add3 ." + (j + 1) + " " + temparray.toString());
                                    j = j + 2;
                                }
                                aktarray.clear();
                                aktind = 0;
                                //} else SkrivUt(4, "Sparar INTE data i TJ strlen == menlen loopen.");
                                // Kolla vektorlngd innan kning.
                                mindex++;
                                if (mindex >= mvektlen) {
                                    sparaTokens(tokens);
                                    mind = mindex;
                                    return ""; // Fler sidor.
                                }
                                men = (meningsvektor.get(mindex)).helameningen;
                                menlen = men.length();
                                // menlen = (meningsvektor.get(mindex)).length();
                                // Leta efter nsta text.
                            } else if (strlen < menlen) {
                                // Hela string fr plats i meningen.
                                // Stega string. Behll mening. Kolla om slut p sidan.
                                // Behver inte splittra arrayen hr!
                                // Kan behva spara denna string till arbetsarrayen.
                                SkrivUt(4, "TJ strlen < menlen loopen");
                                SkrivUt(4, "Men: " + men);
                                SkrivUt(4, "string: " + string);
                                SkrivUt(4, ">> bytestr: " + bytestr.toString());
                                // Ansats: Spara inte tillbaka data hr!
                                prevny = new COSString(bytestr);
                                aktarray.add(prevny);
                                aktind++;
                                // prevny.reset();
                                // prevny.append( bytestr );
                                /*
                                tokens.add(j, TJ); // Spara Tj operatorn. Kolla index.
                                tokens.add(j, prevny);
                                j = j+2;
                                 *
                                 */
                                // Frn (while strlen < menlen.
                                // Om firsttime == true s skall data INTE sparas eftersom den
                                // redan r sparad.
                                // Skall denna kod vara med?
                                if (firsttime == false)
                                    if ((k >= previous.size() - 1) || ((k >= previous.size() - 2)
                                            && (!(previous.get(k + 1) instanceof COSString)))) {
                                        SkrivUt(4, "Spara i TJ strlen < menlen loopen.");
                                        // prevny = new COSString( bytestr );
                                        // aktarray.add(prevny);
                                        // aktind++;
                                        // prevny.reset();
                                        // prevny.append( bytestr );
                                        tokens.add(j + 1, TJ); // Spara Tj operatorn. Kolla index.
                                        SkrivUt(4, "token.add5 ." + (j + 1) + " " + TJ.toString());
                                        temparray = arraycopy(aktarray);
                                        tokens.add(j + 1, temparray);
                                        SkrivUt(4, "token.add5 ." + (j + 1) + " " + temparray.toString());
                                        j = j + 2;
                                        aktarray.clear();
                                        aktind = 0;
                                    }

                                men = men.substring(strlen, menlen);
                                menlen = menlen - strlen;
                                // AH* Hr borde ett returvrde sttas om sist p sidan.
                                restretur = men;
                                SkrivUt(4, "restretur0: " + restretur);
                                // Kapa mening. Kolla om slut p sidan.

                            }
                            // HTexten += string;
                            // string = string.replaceFirst( strToFind, message );
                            // cosString.reset();
                            // cosString.append( string.getBytes() );
                        } else if (arrElement instanceof COSNumber) {
                            // Testa om det finns nr.
                            // Spara arrElement i aktarray!
                            // Tester visar att det r COSNumber som hanteras!
                            aktarray.add((COSNumber) arrElement);
                            aktind++;
                            int temp = ((COSNumber) arrElement).intValue();
                            seaik = new SEArrayNumber(temp);
                            newCarray.add(seaik);
                            SkrivUt(4, "COSNumber i splitMeningar.");
                        } else if (arrElement instanceof COSInteger) {
                            // seaik = ((COSInteger)arrElement)
                            // Testa om det finns int.
                            // Spara arrElement i aktarray!
                            aktarray.add((COSInteger) arrElement);
                            aktind++;
                            int temp = ((COSNumber) arrElement).intValue();
                            seaik = new SEArrayNumber(temp);
                            newCarray.add(seaik);
                            SkrivUt(4, "COSInteger i splitMeningar.");
                        } else if (arrElement instanceof COSFloat) {
                            // Testa om det finns float.
                            // Spara arrElement i aktarray!
                            aktarray.add((COSFloat) arrElement);
                            aktind++;
                            SkrivUt(4, "COSFloat i splitMeningar.");
                        } else {
                            // Spara data till aktarray. Kolla vilken typ det r!
                            SkrivUt(4, "Oknd typ arrel i split: " + arrElement.toString());
                        }
                    }
                    // AH: Tillagd kod!
                    /*
                    tokens.add(j-1, gop);
                    if (gray1)
                    {
                        tokens.add(j-1,cfloat1 );
                        gray1 = false;
                    } else
                    {
                        tokens.add(j-1, cfloat5);
                        gray1 = true;
                    }
                    j = j+2;
                    */
                }
            } else // Inte PDFOperator, samla argument!
            {
                if (next instanceof COSBase) {
                    arguments.add(next);
                    //SkrivUt(4, "COSBase " + next.toString());
                } else {
                    SkrivUt(4, "next inte rtt typ!");
                }
            }
        }
        //now that the tokens are updated we will replace the
        //page content stream.

        SkrivUt(4, ">>> Fre spara tokens i byggStrukturer.");

        PDStream updatedStream = new PDStream(doc1);
        OutputStream out = updatedStream.createOutputStream();
        ContentStreamWriter tokenWriter = new ContentStreamWriter(out);
        tokenWriter.writeTokens(tokens);
        page1.setContents(updatedStream);

        SkrivUt(4, ">>> Efter spara tokens i byggStrukturer.");

    } catch (java.io.IOException ioe) {
        SkrivUt(4, "Exception i getHelaTexten.");
    }
    // Sparad skrpkod:
    // cosStream.setStreamTokens( tokens );
    // tokens = cosStream.getStreamTokens();
    mind = mindex;
    // Borde spara tokens hr!?
    SkrivUt(4, "restretur: " + restretur);
    return restretur;

}

From source file:ddf.catalog.transformer.input.pdf.GeoPdfDocumentGenerator.java

License:Open Source License

private static COSArray generateNeatLineArray() {
    COSArray neatLineArray = new COSArray();
    neatLineArray.add(new COSString("1563.749999999969"));
    neatLineArray.add(new COSString("1992.384698215686"));
    neatLineArray.add(new COSString("1563.75000000011"));
    neatLineArray.add(new COSString("239.6265517842302"));
    neatLineArray.add(new COSString("74.23874999988999"));
    neatLineArray.add(new COSString("239.6265517846492"));
    neatLineArray.add(new COSString("74.23875000008906"));
    neatLineArray.add(new COSString("1992.38469821535"));
    neatLineArray.add(new COSString("1563.749999999969"));
    neatLineArray.add(new COSString("1992.384698215686"));
    return neatLineArray;
}

From source file:ddf.catalog.transformer.input.pdf.GeoPdfDocumentGenerator.java

License:Open Source License

private static COSArray generateCTMArray() {
    COSArray ctmArray = new COSArray();
    ctmArray.add((new COSString("0.003591954022988553")));
    ctmArray.add((new COSString("7.868785750012534e-017")));
    ctmArray.add((new COSString("-7.868785750012534e-017")));
    ctmArray.add((new COSString("0.003591954022988553")));
    ctmArray.add((new COSString("-80.77532309213824")));
    ctmArray.add((new COSString("36.77844766314338")));
    return ctmArray;
}

From source file:ddf.catalog.transformer.input.pdf.GeoPdfParserImpl.java

License:Open Source License

/**
 * A PDF Neatline defines the area of a PDF image with relation to the PDF page.  If no neatline is given
 * it is assumed that the image encompasses the entire page.  This functiong generates a NeatLine
 * in this fashion./*from  w  ww  . jav  a  2 s  . co  m*/
 * @param pdPage the page to generate the NeatLine
 * @return an array of points representing the NeatLine
 */
private COSArray generateNeatLineFromPDFDimensions(PDPage pdPage) {
    COSArray neatLineArray = new COSArray();

    String width = String.valueOf(pdPage.getMediaBox().getWidth());
    String height = String.valueOf(pdPage.getMediaBox().getHeight());

    neatLineArray.add(new COSString("0"));
    neatLineArray.add(new COSString("0"));

    neatLineArray.add(new COSString(width));
    neatLineArray.add(new COSString("0"));

    neatLineArray.add(new COSString(width));
    neatLineArray.add(new COSString(height));

    neatLineArray.add(new COSString("0"));
    neatLineArray.add(new COSString(height));

    return neatLineArray;
}