Example usage for org.apache.pdfbox.pdfwriter ContentStreamWriter ContentStreamWriter

List of usage examples for org.apache.pdfbox.pdfwriter ContentStreamWriter ContentStreamWriter

Introduction

In this page you can find the example usage for org.apache.pdfbox.pdfwriter ContentStreamWriter ContentStreamWriter.

Prototype

public ContentStreamWriter(OutputStream out) 

Source Link

Document

This will create a new content stream writer.

Usage

From source file:airviewer.TextInAnnotationReplacer.java

License:Apache License

static void replaceText(PDDocument document, PDAnnotation anAnnotation, String newContents) {

    if (null != anAnnotation.getAppearance() && null != anAnnotation.getAppearance().getNormalAppearance()) {
        try {/*from   w  w  w.ja va  2 s.c o  m*/
            PDAppearanceStream annotationAppearanceStream = anAnnotation.getAppearance().getNormalAppearance()
                    .getAppearanceStream();

            PDFStreamParser parser = new PDFStreamParser(annotationAppearanceStream);
            parser.parse();
            List<Object> tokens = parser.getTokens();
            for (int j = 0; j < tokens.size(); j++) {
                Object next = tokens.get(j);
                if (next instanceof Operator) {
                    Operator op = (Operator) next;
                    //Tj and TJ are the two operators that display strings in a PDF
                    if (op.getName().equals("Tj")) {
                        // Tj takes one operand and that is the string to display so lets update that operator
                        COSString previous = (COSString) tokens.get(j - 1);
                        previous.setValue(newContents.getBytes(Charset.forName("UTF-8")));
                    } else if (op.getName().equals("TJ")) {
                        COSArray previous = (COSArray) tokens.get(j - 1);
                        for (int k = 0; k < previous.size(); k++) {
                            Object arrElement = previous.getObject(k);
                            if (arrElement instanceof COSString) {
                                COSString cosString = (COSString) arrElement;
                                cosString.setValue(newContents.getBytes(Charset.forName("UTF-8")));
                            }
                        }
                    }
                }
            }

            try (OutputStream out = annotationAppearanceStream.getStream().createOutputStream()) {
                ContentStreamWriter tokenWriter = new ContentStreamWriter(out);
                tokenWriter.writeTokens(tokens);
            }

            anAnnotation.getAppearance().setNormalAppearance(annotationAppearanceStream);
        } catch (IOException ex) {
            Logger.getLogger(TextInAnnotationReplacer.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

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.// ww w  . jav a2 s  .  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.
    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.  ja  va2s  .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.
    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:com.santaanna.friendlyreader.pdfstod.pdfstod3.ReplaceStringStreamEngine.java

License:Apache License

public String grayInsert(String reststr, COSStream cosStream, int pageind) {
    SkrivUt(4, "Frst i grayInsert.");
    // Anvnd meningsvektor fr att hmta meningar.
    // Metoden rknar bara tecknen i string och mening och antar att de r synkade
    // i vrigt.// www.j  a  va  2s  . com

    // ShowText Tj = new ShowText(); // Tj
    // ShowTextGlyph TJ = new ShowTextGlyph(); // TJ
    int mindex = mind;
    PDFOperator Tj = PDFOperator.getOperator("Tj");
    PDFOperator TJ = PDFOperator.getOperator("TJ");
    PDFOperator g = PDFOperator.getOperator("g");
    COSFloat gval = null;
    try {
        gval = new COSFloat("0.0");
    } catch (IOException ioec) {
        SkrivUt(0, "Fel p gval!");
    }
    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 {
        SkrivUt(4, "Frst i grayInsert.");
        tokens = cosStream.getStreamTokens(); // AH* Hmtar tokens frn strukturen istllet.
        // Dessa data skrivs ver hr:
        // tokens = pageTokens.get( pageind ); Fungerade tidigare.
        listTokens(tokens); // Data innan gray.
        // 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, ">>> AddGray-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.");
                    // Lgg till gray operator och argument!
                    tokens.add(j - 1, g);
                    tokens.add(j - 1, gval);
                    j = j + 2;
                    //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();
                    //SkrivUt(4, "Men: " + men);
                    //SkrivUt(4, "string: "+ string);

                    // 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.");
                    // Lgg till gray operator och argument!
                    tokens.add(j - 1, g);
                    tokens.add(j - 1, gval);
                    j = j + 2;
                    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);

                            // 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 addGrey: " + 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 grayInsert.");

        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 grayInsert.");

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

}

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

License:Apache License

public String highlight(String reststr, COSStream cosStream, int pageind, boolean DoHighlight, int valdmening) {
    SkrivUt(1, "Frst i highlight.");
    // Anvnd meningsvektor fr att hmta meningar.
    // Metoden rknar bara tecknen i string och mening och antar att de r synkade
    // i vrigt./*from ww  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");
    PDFOperator g = PDFOperator.getOperator("g");
    PDFOperator G = PDFOperator.getOperator("G");
    COSFloat gval = null;
    COSFloat g2val = null;
    COSFloat etta = null;
    COSFloat nolla = null;
    COSInteger tv = null;
    COSFloat red = null;
    COSFloat green = null;
    PDFOperator rg = PDFOperator.getOperator("rg");
    PDFOperator RG = PDFOperator.getOperator("RG");
    PDFOperator Tr = PDFOperator.getOperator("Tr");

    try {
        gval = new COSFloat("0.0");
        g2val = new COSFloat("0.6"); // AH* Hr stlls sammanfattningsgraden!
        etta = new COSFloat("1.0");
        nolla = new COSFloat("0.0");
        tv = new COSInteger("2");
        red = new COSFloat("0.753");
        green = new COSFloat("1.0");
    } catch (IOException ioec) {
        SkrivUt(0, "Fel p gval!");
    }
    String restretur = ""; // Resterande text p meningsrad. En arbetsstruktur.
    String men; // Aktuell meningsstruktur.
    if (reststr == null ? "" != null : !reststr.equals(""))
        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;
    int tempmennr = 0;
    String teststr = "";
    try {
        SkrivUt(1, "Andra i highlight.");
        tokens = cosStream.getStreamTokens();
        pageTokens.add(pageind, tokens);
        // tokens =  Fungerade tidigare.
        // 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(1, ">>> AddGray-Token size: " + tokens.size());
        for (int j = 0; j < tokens.size(); j++) {
            Object next = tokens.get(j);
            // SkrivUt(1, "Tokennr: " + 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(1, "Tj hittad.");
                    // Lgg till gray operator och argument!
                    // tokens.add(j-1, g);
                    // Hr skall sammanfattningen gras!
                    tempmennr = mennr;
                    if (DoHighlight && !medisammanfattningen(false, pageind, valdmening)) // Ej Array.
                    {
                        tokens.set(j - 3, g2val);
                        SkrivUt(2, "EJ Highlight men:" + tempmennr);
                    } else
                        SkrivUt(2, "Highlight men:" + tempmennr);
                    mindex = mennr;
                    if (mennr >= meningsvektor.size())
                        return "";
                    SkrivUt(2, "mennr: " + tempmennr + " valdmening: " + valdmening);
                    SkrivUt(2, "Meningen: " + meningsvektor.get(tempmennr).helameningen);
                    if (tempmennr == valdmening) {
                        // Kolla frst om det r en tom text => Inte highlight!
                        SkrivUt(2, "Mennr == valdmening.");
                        /* Senaste bortkommenterade.
                        if (valdsida == -1) //
                        { // Tilldela valdsida bara om den inte tilldelats tidigare.
                            // Skall ocks kolla om det bara r blanka i meningsdelen 
                            // p denna sida.
                            teststr = meningsvektor.get(tempmennr).allaDelar.get(mendelnr).deltext;
                            SkrivUt(3, "xxxxxxxxx teststr: " + teststr);
                            if (!baraBlanka( teststr ))
                            {
                                valdsida = pageind; // Detta r den valda sidan.
                                SkrivUt(3, "*************************** valdsida: " + valdsida);
                            } else SkrivUt(3, "bara blanka i deltext till meniong: " + tempmennr);
                        } */
                        SkrivUt(3, ">>>>>>> valdmening:" + valdmening + " mennr: " + mennr);
                        tokens.add(j - 1, rg);
                        tokens.add(j - 1, nolla);
                        // tokens.add(j-1, green);
                        tokens.add(j - 1, nolla);
                        tokens.add(j - 1, red);
                        j += 4;
                        /*
                        tokens.add(j-1, RG);
                        tokens.add(j-1, nolla);
                        tokens.add(j-1, nolla);
                        tokens.add(j-1, red);
                        tokens.add(j-1, rg);
                        tokens.add(j-1, nolla);
                        tokens.add(j-1, nolla);
                        tokens.add(j-1, red);
                         * 
                         */

                        // Addera kod efter Tj:
                        /* tokens.add(j+9, G);
                        tokens.add(j+9, nolla);
                        tokens.add(j+9, g);
                        tokens.add(j+9, nolla);
                        j+= 13;
                         * 
                         */

                        // Kanske behver stta fler variabler.
                    }
                    //Tj takes one operator and that is the string
                    //to display so lets update that operator
                    restretur = "";
                    int aktind = 0;
                    COSString previous = (COSString) tokens.get(j - 1);
                    String string = previous.getString();
                    prevny = null;
                    bytestr = previous.getBytes();
                    strlen = string.length();
                    //SkrivUt(4, "Men: " + men);
                    //SkrivUt(4, "string: "+ string);

                    // 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(1, "TJ hittad.");
                    // Lgg till gray operator och argument!
                    // tokens.add(j-1, g);
                    // Hr skall sammanfattningen gras!
                    tempmennr = mennr;
                    if (DoHighlight && !medisammanfattningen(true, pageind, valdmening)) // Array.
                    {
                        tokens.set(j - 3, g2val);
                        SkrivUt(2, "EJ Highlight men:" + tempmennr);
                    } else
                        SkrivUt(2, "Highlight men:" + tempmennr);
                    mindex = mennr;
                    if (mennr >= meningsvektor.size())
                        return "";
                    SkrivUt(2, "mennr: " + tempmennr + " valdmening: " + valdmening);
                    SkrivUt(2, "Meningen: " + meningsvektor.get(tempmennr).helameningen);
                    if (tempmennr == valdmening) // .
                    { //valdmening
                      // Kolla frst om det r en tom text => Inte highlight!
                        SkrivUt(2, "Mennr == valdmening.");
                        /* if (valdsida == -1) //
                        { // Tilldela valdsida bara om den inte tilldelats tidigare.
                            // Skall ocks kolla om det bara r blanka i meningsdelen
                            // p denna sida.
                            teststr = meningsvektor.get(tempmennr).allaDelar.get(mendelnr).deltext;
                            SkrivUt(3, "xxxxxxxxx teststr: " + teststr);
                            if (!baraBlanka( teststr ))
                            {
                                valdsida = pageind; // Detta r den valda sidan.
                                SkrivUt(3, "*************************** valdsida: " + valdsida);
                            } else SkrivUt(3, "bara blanka i deltext till mening: " + tempmennr);
                        }
                         *
                         */
                        SkrivUt(3, ">>>>>>> valdmening:" + valdmening + " mennr: " + mennr);

                        //tokens.add(j-2, RG);
                        //tokens.add(j-2, nolla);
                        //tokens.add(j-2, nolla);
                        // tokens.add(j-2, red);

                        tokens.add(j - 1, rg);
                        tokens.add(j - 1, nolla);
                        // tokens.add(j-1, green);
                        tokens.add(j - 1, nolla);
                        tokens.add(j - 1, red);

                        // Addera kod efter Tj:
                        // tokens.add(j+9, G);
                        // tokens.add(j+9, nolla);
                        // tokens.add(j+9, g);
                        // tokens.add(j+9, nolla);
                        // j+= 13;
                        j += 4;
                        // Kanske behver stta fler variabler.
                    }
                    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);

                            // 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 addGrey: " + 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(3, ">>> Fre spara tokens i highlight.");
        PDStream updatedStream = new PDStream(doc1);
        OutputStream out = updatedStream.createOutputStream();
        ContentStreamWriter tokenWriter = new ContentStreamWriter(out);
        tokenWriter.writeTokens(tokens);
        // if (updatedStream == null) SkrivUt(4, "updatedStream == null");
        if (page1 == null)
            SkrivUt(4, "page == null");
        page1.setContents(updatedStream);

        SkrivUt(3, ">>> Efter spara tokens i highlight.");

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

}

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

License:Apache License

public void sparaTokens(List intokens) {
    listTokens(intokens);//from  w w w .  j a  va2  s.  c o m
    // if (true) return;
    try {
        SkrivUt(4, ">>> Fre spara tokens i sparaTokens.");
        SkrivUt(4, "Tok len: " + intokens.size());
        if (intokens == null)
            SkrivUt(4, "Token == null.");
        if (doc == null) {
            SkrivUt(4, "doc == null");
            doc = new PDDocument();
        }
        if (page1 == null)
            SkrivUt(4, "page1 == null");
        PDStream updatedStream = new PDStream(doc);
        // SkrivUt(4, "1.");
        OutputStream out = updatedStream.createOutputStream();
        // SkrivUt(4, "2.");
        ContentStreamWriter tokenWriter = new ContentStreamWriter(out);
        // SkrivUt(4, "3.");
        tokenWriter.writeTokens(intokens); // Denna rad felar => Sparande felar.
        // SkrivUt(4, "4.");
        page1.setContents(updatedStream);
        SkrivUt(4, ">>> Efter spara tokens i sparaTokens.");
        /*
        doc.save( outputFile ); // Skriv tillbaka resultatet till fil! Tas bort senare!
        if( doc != null )
        {
        doc.close();
        }
         *
         */

    } catch (java.io.IOException ioe) {
        SkrivUt(0, "IOException i sparaTokens.");
    } /* catch (org.apache.pdfbox.exceptions.COSVisitorException cve)
      { // Denna exception skall bara vara aktiverad vid save och close!
      SkrivUt(4, "COSVisitorException i sparaTokens.");
      } */
    // finally
    // {

    //}
}

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

License:Apache License

/**
 * Sammanfatta PDF dokumentet baserat p ..
 *
 * @param inputFile The PDF to open.//from ww w  .  j a  v a2s  .c  o m
 * @param outputFile The PDF to write to.
 * @param strToFind The string to find in the PDF document.
 * @param message The message to write in the file.
 *
 * @throws IOException If there is an error writing the data.
 * @throws COSVisitorException If there is an error writing the PDF.
 */
public Collection<SEmening> doIt(String inputFile, String outputFile1, boolean DoHighlight, int sumslidval,
        int valdmening) throws IOException, COSVisitorException {
    // the document
    // doc = null; // Output dokumentet (? Kollas!)
    PDFOperator gop = PDFOperator.getOperator("g");
    COSFloat cfloat5 = new COSFloat("0.25");
    COSFloat cfloat1 = new COSFloat("0.75");
    Boolean gray1 = true;
    outputFile = outputFile1;
    String meningsrest = "";
    String sidtext = "";
    Boolean filesaved = false;

    try {
        helaTexten = "";
        SkrivUt(3, "Fre DoIt doc1 load");
        doc1 = PDDocument.load(inputFile); // Indokumentet.
        SkrivUt(3, "Efter DoIt doc1 load");
        List pages = doc1.getDocumentCatalog().getAllPages();
        // SkrivUt(2, "Antal sidor: " + pages.size());
        for (int i = 0; i < pages.size(); i++) { // Frsta fasen skall samla hela texten samt ev ndra relativa till absoluta.
                                                 // TBVector = new Vector<SETextBlock>(); // TB vektorn fr denna sida.
                                                 // PageVector.add(i, TBVector); // Lgg till TB vektorn fr denna sida.
            SkrivUt(4, "Ny sida helaTexten: " + i);
            PDPage page = (PDPage) pages.get(i);
            PDStream contents = page.getContents();
            //AH Kod frn PageDrawer:
            if (contents != null) {
                PDResources resources = page.findResources();
                SkrivUt(4, "Fre getHelaTexten.");
                // Fas = relativ2absolut r inte implementerad n!
                // PDFStreamEngine.fas = PDFStreamEngine.rel2abs;
                setSumcharAlla(0); // Nollstll teckenrknaren fr strings
                sidtext = getHelaTexten(page.getContents().getStream()); //getTextFromPDF, Robin
                helaTexten += sidtext;
                // Hmta hela texten frn dokumentet.
                // SkrivUt(2, "Hela texten per sida0: " + sidtext);
                // helaTexten = ""; // Skall inte nollstllas nu!
                // helaTexten = ""; // AH* >> Nollstll INTE, - fr alla sidor.
                SkrivUt(4, "Efter getHelaTexten.");
                // cosStream.getStreamToken
                /*
                // PDStream nycont = new PDStream( getTokenList());
                PDFStreamEngine.fas = PDFStreamEngine.splitstrings;
                processStream( page, resources, page.getContents().getStream());
                SkrivUt(4, "Hela texten2: " + helaTexten);
                SkrivUt(4, "Efter andra processStream.");
                meningsvektor = Hittameningarna( helaTexten );
                helaTexten = ""; // AH* >> Nollstll???
                 *
                 */
            }
        } // Extrahera meningarna frn hela texten:
          // SkrivUt(2, "Hela texten1: " + helaTexten);
        meningsvektor = Hittameningarna(helaTexten); // Splittra texten i meningar.
        SkrivUt(1, "Meningsvektor.Size: " + meningsvektor.size());
        SEmening semen = null;
        for (int n = 0; n < meningsvektor.size(); n++) {
            // Lgg till mening till meningsvektor.
            // semen = new SEmening();
            // semen.helameningen = menvektor.get( n );
            // meningsvektor.add(n, semen); // Huvudstrukturen fr meningar.
            SkrivUt(1, "Mening: " + meningsvektor.get(n).helameningen);
        }
        /* for (int n = 0; n < meningsvektor.size(); n++ )
        {
        SkrivUt(4, "Mening: " + meningsvektor.get( n ).helameningen);
        } */

        // String helaTextTemp = helaTexten;

        // Vid nsta bearbetning skall string och array splittras vid
        // meningsgrnser.
        mind = 0;
        meningsrest = meningsvektor.get(mind).helameningen; // Kvarvarande text p aktuella sidan
        for (int i = 0; i < pages.size(); i++) {
            // Borde flytta p denna om de inte skall anvndas!
            // TBVector = new Vector<SETextBlock>(); // TB vektorn fr denna sida.
            // PageVector.add(i, TBVector); // Totalstruktur.
            // Lgg till TB vektorn fr denna sida.
            SkrivUt(4, "Ny sida Split: " + i);
            // PDPage ndrad till lokal variabel!
            page1 = (PDPage) pages.get(i);
            PDStream contents = page1.getContents();
            //AH Kod frn PageDrawer:
            SkrivUt(4, "Innan contents test.");
            if (contents != null) {
                PDResources resources = page1.findResources();
                SkrivUt(3, "Fre splitMeningar 1.");
                // PDFStreamEngine.fas = PDFStreamEngine.rel2abs;
                setSumcharAlla(0); // Nollstll teckenrknaren fr strings
                SkrivUt(4, "Fre splitMeningar 2.");
                meningsrest = splitMeningar(meningsrest, page1.getContents().getStream());
                SkrivUt(4, "*** meningsrest: " + meningsrest);
                SkrivUt(4, "3, Efter splitMeningar.");
            }
        }

        // Kolla denna kod!!!
        // saveAndClose( outputFile, doc1 ); // AH****
        // doc1 = PDDocument.load( inputFile ); // Indokumentet.
        // SkrivUt(3,"Efter DoIt doc1 load");
        // pages = doc1.getDocumentCatalog().getAllPages(); Nyinlagd. Kvar???

        // Hr skall g operatorer lggas till fr varje TJ och Tj!
        mind = 0; // Behvs denna hr?
        meningsrest = meningsvektor.get(mind).helameningen; // Kvarvarande text p aktuella sidan.

        for (int i = 0; i < pages.size(); i++) {
            // Borde flytta p denna om de inte skall anvndas!
            // TBVector = new Vector<SETextBlock>(); // TB vektorn fr denna sida.
            // PageVector.add(i, TBVector); // Totalstruktur.
            // Lgg till TB vektorn fr denna sida.
            SkrivUt(4, "Ny sida Gray: " + i);
            // PDPage ndrad till lokal variabel!
            page1 = (PDPage) pages.get(i);
            PDStream contents = page1.getContents();
            //AH Kod frn PageDrawer:
            SkrivUt(4, "Innan contents test.");
            if (contents != null) {
                PDResources resources = page1.findResources();
                SkrivUt(3, "Fre GrayInsert 1.");
                // PDFStreamEngine.fas = PDFStreamEngine.rel2abs;
                setSumcharAlla(0); // Nollstll teckenrknaren fr strings
                // SkrivUt(4, "Fre splitMeningar 2.");
                meningsrest = grayInsert(meningsrest, page1.getContents().getStream(), i);
                //SkrivUt(4, "*** meningsrest: "+ meningsrest);
                SkrivUt(3, "Efter grayInsert av sida.");
            }
        }
        SkrivUt(3, "Efter hela grayInsert.");

        // Bygg TB och meningsstrukturer.
        //
        mind = 0;
        meningsrest = meningsvektor.get(mind).helameningen; // Kvarvarande text p aktuella sidan.

        for (int i = 0; i < pages.size(); i++) {
            TBIndex = 0; // Index i textblocks strukturen.
            // Hr anvnds och byggs datastrukturerna!
            TBVector = new Vector<SETextBlock>(); // TB vektorn fr denna sida.
            PageVector.add(i, TBVector); // Totalstruktur.
            tbpagenr = i;
            // Lgg till TB vektorn fr denna sida.
            SkrivUt(4, "Ny sida Split: " + i);
            // PDPage ndrad till lokal variabel!
            page1 = (PDPage) pages.get(i);
            PDStream contents = page1.getContents();
            //AH Kod frn PageDrawer:
            SkrivUt(4, "Innan contents test.");
            if (contents != null) {
                PDResources resources = page1.findResources();
                SkrivUt(3, "Fre byggStrukturer 1.");
                // PDFStreamEngine.fas = PDFStreamEngine.rel2abs;
                setSumcharAlla(0); // Nollstll teckenrknaren fr strings
                SkrivUt(4, "Fre byggStrukturer 2.");
                meningsrest = byggStrukturer(meningsrest, page1.getContents().getStream(), i);
                SkrivUt(4, "*** meningsrest: " + meningsrest);
                SkrivUt(3, "Efter byggStrukturer.");
            }
        }

        // Skriv ut innehllet i TB strukturen:
        listTextBlocks();

        // Skriv ut meningarna:
        listMeningar();
        //*/
        // Sista passet skall samla in TP fontmetrics och spara dem till TB strukturer.

        SkrivUt(4, "Fr lngt.");
        mind = 0; // Behvs denna hr?

        for (int i = 0; i < pages.size(); i++) { // Frsta fasen skall samla hela texten samt ev ndra relativa till absoluta.
                                                 // TBVector = new Vector<SETextBlock>(); // TB vektorn fr denna sida.
                                                 // PageVector.add(i, TBVector); // Lgg till TB vektorn fr denna sida.
            tempsidnr = i;
            SkrivUt(4, "Ny sida A: " + i);
            PDPage page = (PDPage) pages.get(i);
            PDStream contents = page.getContents();
            //AH Kod frn PageDrawer:
            if (contents != null) {
                PDResources resources = page.findResources();
                SkrivUt(4, "Fre processStream.");
                // PDFStreamEngine.fas = PDFStreamEngine.rel2abs;
                setSumcharAlla(0); // Nollstll teckenrknaren fr strings
                // SkrivUt(4, "Hela texten2FRE: " + helaTexten);
                // processStream( page, resources, page.getContents().getStream()); // Hr anropas sidhanteringen!
                // SkrivUt(2, "Hela texten2: " + helaTexten);
                // helaTexten = ""; // AH* >> Nollstll INTE, - fr alla sidor.
                SkrivUt(4, "Efter processStream. fre nya");
                // cosStream.getStreamToken

                /*
                // PDStream nycont = new PDStream( getTokenList());
                PDFStreamEngine.fas = PDFStreamEngine.splitstrings;
                processStream( page, resources, page.getContents().getStream());
                SkrivUt(4, "Hela texten2: " + helaTexten);
                SkrivUt(4, "Efter andra processStream.");
                meningsvektor = Hittameningarna( helaTexten );
                helaTexten = ""; // AH* >> Nollstll???
                 *
                 */
            }
        }
        SkrivUt(3, "Efter processStream.");

        //if (DoHighlight)
        //{
        // Hr skall texten frmedlas till EasyReader och resultatlista med
        // meningar som skall highlightas skall returneras!
        if ((DoHighlight) && !(helaTexten.equals(""))) {
            SkrivUt(2, "Fre sammanfatta. helaTexten = \"\"");
            menisammanfattningen = sammanfatta(helaTexten, sumslidval);
            System.out.println(menisammanfattningen);
        } else
            menisammanfattningen = null;
        // Hr skall g operatorernas argument modifieras fr de som skall vara
        // med i sammanfattningen.
        mind = 0; // Behvs denna hr?
        meningsrest = meningsvektor.get(mind).helameningen; // Kvarvarande text p aktuella sidan.
        cosenr = 0; // index fr COSString eller COSArray.
        mennr = 0; // index fr aktuell mening.
        mendelnr = 0;
        mendelantal = 0; // Antal delar som meningen bestr av.
        valdsida = -1; // valda sidan inte knd n.
        for (int i = 0; i < pages.size(); i++) {
            // Borde flytta p denna om de inte skall anvndas!
            // TBVector = new Vector<SETextBlock>(); // TB vektorn fr denna sida.
            // PageVector.add(i, TBVector); // Totalstruktur.
            // Lgg till TB vektorn fr denna sida.
            SkrivUt(4, "Ny sida highlight: " + i);
            // PDPage ndrad till lokal variabel!
            page1 = (PDPage) pages.get(i);
            PDStream contents = page1.getContents();
            //AH Kod frn PageDrawer:
            SkrivUt(4, "Innan contents test.");
            if (contents != null) {
                PDResources resources = page1.findResources();
                SkrivUt(1, "Fre highlight 1. Sida: " + i);
                // PDFStreamEngine.fas = PDFStreamEngine.rel2abs;
                setSumcharAlla(0); // Nollstll teckenrknaren fr strings
                // SkrivUt(4, "Fre splitMeningar 2.");
                // if (DoHighlight) 
                meningsrest = highlight(meningsrest, page1.getContents().getStream(), i, DoHighlight,
                        valdmening);
                //SkrivUt(4, "*** meningsrest: "+ meningsrest);
                SkrivUt(1, "Efter highlight av sida:" + i);
            }
        }
        SkrivUt(3, "Efter hela highlight.");
        /*} else // Spara data till pageTokens fr sparande till fil efter.
        {
                
        }*/

        // Dags att hmta fontmetrics och spara till fil. r det samma som ovan?
        // Skall inte gras f.n!

        for (int i = 0; i < pages.size(); i++) {
            TBVector = new Vector<SETextBlock>(); // TB vektorn fr denna sida.
            PageVector.add(i, TBVector); // Lgg till TB vektorn fr denna sida.
            SkrivUt(4, "Ny sida X: " + i);
            // PDPage ndrad, inte lokal lngre!
            page = (PDPage) pages.get(i);
            PDStream contents = page.getContents();
            //AH Kod frn PageDrawer:
            if (contents != null) {
                PDResources resources = page.findResources();
                SkrivUt(4, "Fre processStream.");
                // PDFStreamEngine.fas = PDFStreamEngine.rel2abs;
                setSumcharAlla(0); // Nollstll teckenrknaren fr strings
                // AH* Nsta rad anvnds fr att hmta ut fontmetrics.
                /* processStream( page, resources, page.getContents().getStream()); // Hr anropas sidhanteringen!
                SkrivUt(4, "Hela texten1: " + helaTexten);
                // helaTexten = ""; // Skall inte nollstllas nu!
                SkrivUt(4, "Efter processStream. fre nya");
                // cosStream.getStreamToken
                 *
                 */

                // PDStream nycont = new PDStream( getTokenList());
                // PDFStreamEngine.fas = PDFStreamEngine.splitstrings;
                // Nedanstende har anropats ovan.
                // processStream( page, resources, page.getContents().getStream());
                // SkrivUt(4, "Hela texten3: " + helaTexten);
                SkrivUt(4, "Efter andra processStream.");
            }
            SkrivUt(3, "Efter hela andra processStream.");
            /*
            PDFStreamParser parser = new PDFStreamParser(contents.getStream());
            parser.parse();
             *
             */
            // SkrivUt(4, "Egna loopen Sida: " + i);
            /* 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.
             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" ) )
                {
                    //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();
                    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" ) )
                {
                    COSArray previous = (COSArray)tokens.get( j-1 );
                    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();
                            string = string.replaceFirst( strToFind, message );
                            cosString.reset();
                            cosString.append( string.getBytes() );
                        }
                    }
                    // 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.
            // Uppdatera data till filen!
            SkrivUt(3, ">>> Fre spara tokens i DoIt.");
            PDStream updatedStream = new PDStream(doc1);
            SkrivUt(3, ">>> Efter updated stream i DoIt.");
            OutputStream out = updatedStream.createOutputStream();
            ContentStreamWriter tokenWriter = new ContentStreamWriter(out);
            tokenWriter.writeTokens(pageTokens.get(i));
            page.setContents(updatedStream);
            SkrivUt(3, ">>> Efter spara tokens i DoIt.");
        }
        /*
        if (!filesaved)
        {
        doc1.save( outputFile );
        filesaved = true;
        }
        doc1.close();
        SkrivUt(3, "doc1 closed 1.");
         *
         */
    } finally {
        saveAndClose(outputFile, doc1);
        /*
        SkrivUt(2, "Finally.");
        if( doc1 != null )
        {
        if (!filesaved)
        {
            doc1.save( outputFile );
            filesaved = true;
        }
        doc1.close();
        SkrivUt(3, "doc1 closed 2.");
        }
         *
         */
    }

    return meningsvektor;
}

From source file:org.lockss.pdf.pdfbox.PdfBoxPageTokenStream.java

License:Open Source License

@Override
public void setTokens(List<PdfToken> newTokens) throws PdfException {
    try {//from   w w w.  ja  va 2s .c  o  m
        PDStream newPdStream = makeNewPdStream();
        ContentStreamWriter tokenWriter = new ContentStreamWriter(newPdStream.createOutputStream());
        tokenWriter.writeTokens(PdfBoxTokens.unwrapList(newTokens));
        pdfBoxPage.pdPage.setContents(newPdStream);
    } catch (IOException ioe) {
        throw new PdfException("Error while writing page token stream", ioe);
    }
}

From source file:org.lockss.pdf.pdfbox.PdfBoxXObjectTokenStream.java

License:Open Source License

@Override
public void setTokens(List<PdfToken> newTokens) throws PdfException {
    try {/*from  w w w. j  av a 2s . c  o m*/
        PDXObjectForm oldForm = pdXObjectForm;
        PDStream newPdStream = makeNewPdStream();
        newPdStream.getStream().setName(COSName.SUBTYPE, PDXObjectForm.SUB_TYPE);
        ContentStreamWriter tokenWriter = new ContentStreamWriter(newPdStream.createOutputStream());
        tokenWriter.writeTokens(PdfBoxTokens.unwrapList(newTokens));
        pdXObjectForm = new PDXObjectForm(newPdStream);
        pdXObjectForm.setResources(getStreamResources());
        Map<String, PDXObject> xobjects = parentResources.getXObjects();
        boolean found = true; // Bug? False here then true before 'break'? (Harmless)
        for (Map.Entry<String, PDXObject> ent : xobjects.entrySet()) {
            String key = ent.getKey();
            PDXObject val = ent.getValue();
            if (val == oldForm) {
                xobjects.put(key, pdXObjectForm);
                /*
                 * IMPLEMENTATION NOTE
                 * 
                 * The map returned by getXObjects() (PDFBox 1.8.9: PDResources.java
                 * lines 326-339) is a HashMap that caches the stored COSDictionary of
                 * XObjects. When setXObjects is called, the supplied map is used to
                 * supplant the cached map and to regenerate the stored COSDictionary.
                 * We observed identical original bytes being filtered to results that
                 * differ only in the ordering of resource dictionaries in the
                 * ASMscience Journals Plugin on the CLOCKSS production machines after
                 * this code was introduced. It turns out that the machines running
                 * Java 6 agreed together and those running Java 7 agreed together.
                 * Use a sorted map instead (added in 1.68.3).
                 */
                parentResources.setXObjects(new TreeMap<String, PDXObject>(xobjects));
                break;
            }
        }
        if (!found) {
            log.debug2("No mapping found while replacing form token stream");
        }
    } catch (IOException ioe) {
        throw new PdfException("Error while writing XObject token stream", ioe);
    }
}

From source file:Utilities.GlobalVar.java

public static void updateSeqNum(PDDocument doc, String cycle) throws IOException {
    int sequenceNum = 1;
    List pages = doc.getDocumentCatalog().getAllPages();

    for (int i = 0; i < pages.size(); i++) {
        PDPage page = (PDPage) pages.get(i);
        PDStream contents = page.getContents();
        PDFStreamParser parser = new PDFStreamParser(contents.getStream());
        parser.parse();/*from  w  w w  . jav a  2s.c o  m*/
        List tokens = parser.getTokens();
        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
                if (op.getOperation().equals("Tj")) {
                    // 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();
                    //                        System.out.println(string);
                    //                        System.out.println(string.charAt(5));
                    if (string.contains("/0")) {
                        String seq = cycle + "/" + GlobalVar.globalCountGenerator5Digit(sequenceNum);
                        string = string.replaceFirst(string, seq);
                        previous.reset();
                        previous.append(string.getBytes("ISO-8859-1"));
                        sequenceNum++;
                        break;
                    }
                    //Word you want to change. Currently this code changes word "Solr" to "Solr123"
                    previous.reset();
                    previous.append(string.getBytes("ISO-8859-1"));

                } else if (op.getOperation().equals("TJ")) {
                    COSArray previous = (COSArray) tokens.get(j - 1);
                    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();
                            //                                System.out.println(string);
                            if (string.contains("/00")) {
                                String seq = cycle + "/" + GlobalVar.globalCountGenerator5Digit(sequenceNum);
                                string = string.replaceFirst(string, seq);
                                cosString.reset();
                                cosString.append(string.getBytes("ISO-8859-1"));
                                sequenceNum++;
                                break;
                            }
                            // Currently this code changes word "Solr" to "Solr123"
                            cosString.reset();
                            cosString.append(string.getBytes("ISO-8859-1"));
                            //                                break;
                        }
                    }
                }
            }
        }
        // now that the tokens are updated we will replace the page content stream.
        PDStream updatedStream = new PDStream(doc);
        OutputStream out = updatedStream.createOutputStream();
        ContentStreamWriter tokenWriter = new ContentStreamWriter(out);
        tokenWriter.writeTokens(tokens);
        page.setContents(updatedStream);
    }
}