Example usage for org.apache.pdfbox.cos COSArray toString

List of usage examples for org.apache.pdfbox.cos COSArray toString

Introduction

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

Prototype

@Override
public String toString() 

Source Link

Usage

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  ava  2  s.c om*/
    // 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.//from w ww  .j a va  2s. co 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.
    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;

}