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

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

Introduction

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

Prototype

public byte[] getBytes() 

Source Link

Document

Returns the raw bytes of the string.

Usage

From source file:ShowSignature.java

License:Apache License

private void showSignature(String[] args) throws IOException, CertificateException {
    if (args.length != 2) {
        usage();/*from  w w  w.j  a  va2  s .com*/
    } else {
        String password = args[0];
        String infile = args[1];
        PDDocument document = null;
        try {
            document = PDDocument.load(new File(infile), password);
            if (!document.isEncrypted()) {
                System.err.println("Warning: Document is not encrypted.");
            }

            COSDictionary trailer = document.getDocument().getTrailer();
            COSDictionary root = (COSDictionary) trailer.getDictionaryObject(COSName.ROOT);
            COSDictionary acroForm = (COSDictionary) root.getDictionaryObject(COSName.ACRO_FORM);
            COSArray fields = (COSArray) acroForm.getDictionaryObject(COSName.FIELDS);
            for (int i = 0; i < fields.size(); i++) {
                COSDictionary field = (COSDictionary) fields.getObject(i);
                COSName type = field.getCOSName(COSName.FT);
                if (COSName.SIG.equals(type)) {
                    COSDictionary cert = (COSDictionary) field.getDictionaryObject(COSName.V);
                    if (cert != null) {
                        System.out.println("Certificate found");
                        System.out.println("Name=" + cert.getDictionaryObject(COSName.NAME));
                        System.out.println("Modified=" + cert.getDictionaryObject(COSName.M));
                        COSName subFilter = (COSName) cert.getDictionaryObject(COSName.SUB_FILTER);
                        if (subFilter != null) {
                            if (subFilter.getName().equals("adbe.x509.rsa_sha1")) {
                                COSString certString = (COSString) cert
                                        .getDictionaryObject(COSName.getPDFName("Cert"));
                                byte[] certData = certString.getBytes();
                                CertificateFactory factory = CertificateFactory.getInstance("X.509");
                                ByteArrayInputStream certStream = new ByteArrayInputStream(certData);
                                Collection<? extends Certificate> certs = factory
                                        .generateCertificates(certStream);
                                System.out.println("certs=" + certs);
                            } else if (subFilter.getName().equals("adbe.pkcs7.sha1")) {
                                COSString certString = (COSString) cert.getDictionaryObject(COSName.CONTENTS);
                                byte[] certData = certString.getBytes();
                                CertificateFactory factory = CertificateFactory.getInstance("X.509");
                                ByteArrayInputStream certStream = new ByteArrayInputStream(certData);
                                Collection<? extends Certificate> certs = factory
                                        .generateCertificates(certStream);
                                System.out.println("certs=" + certs);
                            } else {
                                System.err.println("Unknown certificate type:" + subFilter);
                            }
                        } else {
                            throw new IOException("Missing subfilter for cert dictionary");
                        }
                    } else {
                        System.out.println("Signature found, but no certificate");
                    }
                }
            }
        } finally {
            if (document != null) {
                document.close();
            }
        }
    }
}

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

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

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

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

                    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

License:Apache License

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

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

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

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

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

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

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

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

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

                    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

}

From source file: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.//from   w  w  w.j  av  a  2 s .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");
    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.//  w ww .jav  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:org.apache.fop.render.pdf.pdfbox.MergeFontsPDFWriter.java

License:Apache License

private String getString(COSString s) throws UnsupportedEncodingException {
    String encoding = "ISO-8859-1";
    byte[] data = s.getBytes();
    int start = 0;
    if (data.length > 2) {
        if (data[0] == (byte) 0xFF && data[1] == (byte) 0xFE) {
            encoding = "UTF-16LE";
            start = 2;// w ww. j a  v  a2  s  .c  om
        } else if (data[0] == (byte) 0xFE && data[1] == (byte) 0xFF) {
            encoding = "UTF-16BE";
            start = 2;
        }
    }
    return new String(data, start, data.length - start, encoding);
}

From source file:org.apache.fop.render.pdf.pdfbox.MergeFontsPDFWriter.java

License:Apache License

private List<String> readCOSString(COSString s, FontContainer oldFont) throws IOException {
    List<String> word = new ArrayList<String>();
    byte[] string = s.getBytes();
    InputStream in = new ByteArrayInputStream(string);
    while (in.available() > 0) {
        int code = oldFont.font.readCode(in);
        String unicode = oldFont.font.toUnicode(code);
        if (unicode == null) {
            return null;
        }/*from   w  ww  . j  ava2s .  c o m*/
        word.add(unicode);
    }
    return word;
}

From source file:org.apache.fop.render.pdf.pdfbox.PDFBoxAdapter.java

License:Apache License

private Object readCOSString(COSString string, Object keyBase) {
    //retval = ((COSString)base).getString(); //this is unsafe for binary content
    byte[] bytes = string.getBytes();
    //Be on the safe side and use the byte array to avoid encoding problems
    //as PDFBox doesn't indicate whether the string is just
    //a string (PDF 1.4, 3.2.3) or a text string (PDF 1.4, 3.8.1).
    if (keyBase instanceof COSObject) {
        return cacheClonedObject(keyBase, new PDFString(bytes));
    } else {/*w ww .ja va 2  s  . c om*/
        if (PDFString.isUSASCII(bytes)) {
            return cacheClonedObject(keyBase, string.getString());
        } else {
            return cacheClonedObject(keyBase, bytes);
        }
    }
}

From source file:pdfbox.SignatureVerifier.java

License:Apache License

public Map<String, SignatureResult> extractSignatures(File infile) throws IOException, CertificateException,
        NoSuchAlgorithmException, InvalidKeyException, NoSuchProviderException, SignatureException {
    Map<String, SignatureResult> result = new HashMap<>();

    try (PDDocument document = PDDocument.load(infile)) {
        for (PDSignature sig : document.getSignatureDictionaries()) {
            COSDictionary sigDict = sig.getCOSObject();
            COSString contents = (COSString) sigDict.getDictionaryObject(COSName.CONTENTS);

            // download the signed content
            byte[] buf;
            try (FileInputStream fis = new FileInputStream(infile)) {
                buf = sig.getSignedContent(fis);
            }/* ww  w.java2  s .c o m*/

            System.out.println("Signature found");
            System.out.println("Name:     " + sig.getName());
            System.out.println("Modified: " + sdf.format(sig.getSignDate().getTime()));
            String subFilter = sig.getSubFilter();
            if (subFilter != null) {
                switch (subFilter) {
                case "adbe.pkcs7.detached": // COSName.ADBE_PKCS7_DETACHED
                    result.put(sig.getName(), verifyPKCS7(buf, contents, sig));

                    //TODO check certificate chain, revocation lists, timestamp...
                    break;
                case "adbe.pkcs7.sha1": // COSName.ADBE_PKCS7_SHA1
                {
                    // example: PDFBOX-1452.pdf
                    //COSString certString = (COSString) sigDict.getDictionaryObject(
                    //        COSName.CONTENTS);
                    byte[] certData = contents.getBytes();
                    Collection<? extends Certificate> certs = getCertificates(certData);
                    System.out.println("certs=" + certs);
                    byte[] hash = MessageDigest.getInstance("SHA1").digest(buf);
                    result.put(sig.getName(), verifyPKCS7(hash, contents, sig));

                    //TODO check certificate chain, revocation lists, timestamp...
                    break;
                }
                case "adbe.x509.rsa_sha1": // COSName.ADBE_PKCS7_SHA1
                {
                    // example: PDFBOX-2693.pdf
                    COSString certString = (COSString) sigDict.getDictionaryObject(COSName.getPDFName("Cert"));
                    byte[] certData = certString.getBytes();
                    Collection<? extends Certificate> certs = getCertificates(certData);
                    System.out.println("certs=" + certs);

                    //TODO verify signature
                    throw new IOException(subFilter + " verification not supported");
                    //break;
                }
                default:
                    throw new IOException("Unknown certificate type: " + subFilter);
                    //break;
                }
            } else {
                throw new IOException("Missing subfilter for cert dictionary");
            }
        }
    } catch (CMSException | OperatorCreationException ex) {
        throw new IOException(ex);
    }

    return result;
}

From source file:pdfbox.SignatureVerifier.java

License:Apache License

/**
 * Verify a PKCS7 signature./*from  w  w  w  .  j a  v a2 s. c om*/
 *
 * @param byteArray the byte sequence that has been signed
 * @param contents the /Contents field as a COSString
 * @param sig the PDF signature (the /V dictionary)
 * @throws CertificateException
 * @throws CMSException
 * @throws StoreException
 * @throws OperatorCreationException
 */
private SignatureResult verifyPKCS7(byte[] byteArray, COSString contents, PDSignature sig)
        throws CMSException, CertificateException, StoreException, OperatorCreationException {
    // inspiration:
    // http://stackoverflow.com/a/26702631/535646
    // http://stackoverflow.com/a/9261365/535646
    CMSProcessable signedContent = new CMSProcessableByteArray(byteArray);
    CMSSignedData signedData = new CMSSignedData(signedContent, contents.getBytes());
    Store certificatesStore = signedData.getCertificates();
    Collection<SignerInformation> signers = signedData.getSignerInfos().getSigners();
    SignerInformation signerInformation = signers.iterator().next();
    Collection matches = certificatesStore.getMatches(signerInformation.getSID());
    X509CertificateHolder certificateHolder = (X509CertificateHolder) matches.iterator().next();
    X509Certificate certFromSignedData = new JcaX509CertificateConverter().getCertificate(certificateHolder);
    //System.out.println("certFromSignedData: " + certFromSignedData);
    certFromSignedData.checkValidity(sig.getSignDate().getTime());

    JcaSimpleSignerInfoVerifierBuilder verifierBuilder = new JcaSimpleSignerInfoVerifierBuilder();
    if (provider != null) {
        verifierBuilder.setProvider(provider);
    }

    boolean validated = false;
    try {
        validated = signerInformation.verify(verifierBuilder.build(certFromSignedData));

    } catch (CMSSignerDigestMismatchException e) {
        System.out.println("Signature failed to validate: ");
        e.printStackTrace();
    }

    return new SignatureResult(certFromSignedData, validated);
}