List of usage examples for org.apache.pdfbox.cos COSString getString
public String getString()
From source file:com.santaanna.friendlyreader.pdfstod.pdfstod3.ReplaceStringStreamEngine.java
License:Apache License
public String getHelaTexten(COSStream cosStream) { String HTexten = ""; String string = ""; try {// ww w .ja v a 2 s. c o m List tokens = cosStream.getStreamTokens(); // 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(2, "token-size: " + tokens.size()); // xxx for (int j = 0; j < tokens.size(); j++) { Object next = tokens.get(j); if (next instanceof PDFOperator) { PDFOperator op = (PDFOperator) next; //Tj and TJ are the two operators that display //strings in a PDF //AH: //SkrivUt(4, "ArgumentList length: " + arguments.size()); //>> AH* SkrivUt(4, "Operator anrop:" + OperatorCall( op, arguments )); // AH: Hr borde man gra ett anrop till StreamEngine! arguments = new LinkedList(); // Mste nollstlla argumenten // efter varje operator. if (op.getOperation().equals("Tj")) { //Tj takes one operator and that is the string //to display so lets update that operator COSString previous = (COSString) tokens.get(j - 1); string = previous.getString(); // SkrivUt(2, "Hittat Tj. String: " + string); // xxx 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")) { COSArray previous = (COSArray) tokens.get(j - 1); for (int k = 0; k < previous.size(); k++) { Object arrElement = previous.getObject(k); if (arrElement instanceof COSString) { COSString cosString = (COSString) arrElement; string = cosString.getString(); // SkrivUt(2, "Hittat TJ. String: " + string); // xxx HTexten += string; // string = string.replaceFirst( strToFind, message ); // cosString.reset(); // cosString.append( string.getBytes() ); } } // AH: Tillagd kod! /* tokens.add(j-1, gop); if (gray1) { tokens.add(j-1,cfloat1 ); gray1 = false; } else { tokens.add(j-1, cfloat5); gray1 = true; } j = j+2; */ } } else // Inte PDFOperator, samla argument! { if (next instanceof COSBase) { arguments.add(next); //SkrivUt(4, "COSBase " + next.toString()); } else { SkrivUt(4, "next inte rtt typ!"); } } } //now that the tokens are updated we will replace the //page content stream. /* PDStream updatedStream = new PDStream(doc); OutputStream out = updatedStream.createOutputStream(); ContentStreamWriter tokenWriter = new ContentStreamWriter(out); tokenWriter.writeTokens( tokens ); page.setContents( updatedStream ); * */ } catch (java.io.IOException ioe) { SkrivUt(4, "Exception i getHelaTexten."); } return HTexten; }
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 ava 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"); 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.//ww w. j a v a 2 s . c om // ShowText Tj = new ShowText(); // Tj // ShowTextGlyph TJ = new ShowTextGlyph(); // TJ int mindex = mind; PDFOperator Tj = PDFOperator.getOperator("Tj"); PDFOperator TJ = PDFOperator.getOperator("TJ"); String restretur = ""; // Resterande text p meningsrad. En arbetsstruktur. String men; // Aktuell meningsstruktur. if (reststr != "") men = reststr; else men = meningsvektor.get(mindex).helameningen; // terskrivet Hit! int menlen = men.length(); // Lngden p den aktuella meningen. int mvektlen = meningsvektor.size(); // Storleken p vektorn. 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./* ww w .j a va 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"); PDFOperator g = PDFOperator.getOperator("g"); COSFloat gval = null; try { gval = new COSFloat("0.0"); } catch (IOException ioec) { SkrivUt(0, "Fel p gval!"); } String restretur = ""; // Resterande text p meningsrad. En arbetsstruktur. String men; // Aktuell meningsstruktur. if (reststr != "") men = reststr; else men = meningsvektor.get(mindex).helameningen; // terskrivet Hit! int menlen = men.length(); // Lngden p den aktuella meningen. int mvektlen = meningsvektor.size(); // Storleken p vektorn. byte[] bytestr; // string representerad som byte[] byte[] tempbstr; // byte[] fr temporr lagring. int strlen; // Lngden p den aktuella stringen. COSString prevny = null; boolean firsttime = true; boolean kapad = false; List tokens = null; try { SkrivUt(4, "Frst i grayInsert."); tokens = cosStream.getStreamTokens(); // AH* Hmtar tokens frn strukturen istllet. // Dessa data skrivs ver hr: // tokens = pageTokens.get( pageind ); Fungerade tidigare. listTokens(tokens); // Data innan gray. // List tokens = getTokenList();// AH* parser.getTokens(); Tidigare hmtning av lista. // Dvs hmta INTE tokens frn den parsade filen. Anvnd tidigare data. LinkedList arguments = new LinkedList(); // AH* argumenten till operatorn. SkrivUt(4, ">>> AddGray-Token size: " + tokens.size()); for (int j = 0; j < tokens.size(); j++) { Object next = tokens.get(j); if (next instanceof PDFOperator) { PDFOperator op = (PDFOperator) next; //Tj and TJ are the two operators that display //strings in a PDF //AH: //SkrivUt(4, "ArgumentList length: " + arguments.size()); //>> AH* SkrivUt(4, "Operator anrop:" + OperatorCall( op, arguments )); // AH: Hr borde man gra ett anrop till StreamEngine! arguments = new LinkedList(); // Mste nollstlla argumenten // efter varje operator. if (op.getOperation().equals("Tj")) { SkrivUt(4, "Tj hittad."); // Lgg till gray operator och argument! tokens.add(j - 1, g); tokens.add(j - 1, gval); j = j + 2; //Tj takes one operator and that is the string //to display so lets update that operator COSString previous = (COSString) tokens.get(j - 1); String string = previous.getString(); prevny = null; bytestr = previous.getBytes(); strlen = string.length(); //SkrivUt(4, "Men: " + men); //SkrivUt(4, "string: "+ string); // Kolla kommenterad kod. // HTexten += string; // string = string.replaceFirst( strToFind, message ); // previous.reset(); // previous.append( string.getBytes() ); // AH* Testa tillgg av kod. /* tokens.add(j-1, gop); if (gray1) { tokens.add(j-1,cfloat1 ); gray1 = false; } else { tokens.add(j-1, cfloat5); gray1 = true; } j = j+2; */ } else if (op.getOperation().equals("TJ")) { SkrivUt(4, "TJ hittad."); // Lgg till gray operator och argument! tokens.add(j - 1, g); tokens.add(j - 1, gval); j = j + 2; restretur = ""; int aktind = 0; // fr den aktuella arrayen. COSArray previous = (COSArray) tokens.get(j - 1); firsttime = true; for (int k = 0; k < previous.size(); k++) { Object arrElement = previous.getObject(k); if (arrElement instanceof COSString) { COSString cosString = (COSString) arrElement; String string = cosString.getString(); bytestr = ((COSString) arrElement).getBytes(); strlen = string.length(); prevny = null; // SkrivUt(4, "Men: " + men); // SkrivUt(4, "string: "+ string); // HTexten += string; // string = string.replaceFirst( strToFind, message ); // cosString.reset(); // cosString.append( string.getBytes() ); } else if (arrElement instanceof COSNumber) { // Testa om det finns nr. // Spara arrElement i aktarray! // Tester visar att det r COSNumber som hanteras! // aktarray.add( (COSNumber)arrElement ); // aktind++; // SkrivUt(4, "COSNumber i splitMeningar."); } else if (arrElement instanceof COSInteger) { // Testa om det finns int. // Spara arrElement i aktarray! // aktarray.add( (COSInteger)arrElement ); // aktind++; // SkrivUt(4, "COSInteger i splitMeningar."); } else if (arrElement instanceof COSFloat) { // Testa om det finns float. // Spara arrElement i aktarray! // aktarray.add( (COSFloat)arrElement ); // aktind++; // SkrivUt(4, "COSFloat i splitMeningar."); } else { // Spara data till aktarray. Kolla vilken typ det r! SkrivUt(4, "Oknd typ arrel i addGrey: " + arrElement.toString()); } } // AH: Tillagd kod! /* tokens.add(j-1, gop); if (gray1) { tokens.add(j-1,cfloat1 ); gray1 = false; } else { tokens.add(j-1, cfloat5); gray1 = true; } j = j+2; */ } } else // Inte PDFOperator, samla argument! { if (next instanceof COSBase) { arguments.add(next); //SkrivUt(4, "COSBase " + next.toString()); } else { SkrivUt(4, "next inte rtt typ!"); } } } //now that the tokens are updated we will replace the //page content stream. SkrivUt(4, ">>> Fre spara tokens i grayInsert."); PDStream updatedStream = new PDStream(doc1); OutputStream out = updatedStream.createOutputStream(); ContentStreamWriter tokenWriter = new ContentStreamWriter(out); tokenWriter.writeTokens(tokens); page1.setContents(updatedStream); SkrivUt(4, ">>> Efter spara tokens i grayInsert."); } catch (java.io.IOException ioe) { SkrivUt(4, "Exception i addGrey ."); } // Sparad skrpkod: // cosStream.setStreamTokens( tokens ); // tokens = cosStream.getStreamTokens(); mind = mindex; // Borde spara tokens hr!? SkrivUt(4, "ListTokens efter grayInsert."); listTokens(tokens); return restretur; }
From source file:com.santaanna.friendlyreader.pdfstod.pdfstod3.ReplaceStringStreamEngine.java
License:Apache License
public String highlight(String reststr, COSStream cosStream, int pageind, boolean DoHighlight, int valdmening) { SkrivUt(1, "Frst i highlight."); // Anvnd meningsvektor fr att hmta meningar. // Metoden rknar bara tecknen i string och mening och antar att de r synkade // i vrigt.//from w ww .j av a2 s . co m // ShowText Tj = new ShowText(); // Tj // ShowTextGlyph TJ = new ShowTextGlyph(); // TJ int mindex = mind; PDFOperator Tj = PDFOperator.getOperator("Tj"); PDFOperator TJ = PDFOperator.getOperator("TJ"); 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.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 w w . j a v a 2 s .c o m if (PDFString.isUSASCII(bytes)) { return cacheClonedObject(keyBase, string.getString()); } else { return cacheClonedObject(keyBase, bytes); } } }
From source file:org.lockss.pdf.pdfbox.PdfBoxTokens.java
License:Open Source License
/** * <p>/*from w ww .java 2 s .c o m*/ * Converts from a {@link COSString} to a string value. * </p> * @param cosString A {@link COSString} instance. * @return A string value. * @since 1.56 */ protected static String getString(COSString cosString) { return cosString.getString(); }
From source file:test.be.fedict.eid.applet.PdfSpikeTest.java
License:Open Source License
@Test public void testSignPDF() throws Exception { // create a sample PDF file Document document = new Document(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); PdfWriter.getInstance(document, baos); document.open();//from w ww . ja v a2 s . co m Paragraph titleParagraph = new Paragraph("This is a test."); titleParagraph.setAlignment(Paragraph.ALIGN_CENTER); document.add(titleParagraph); document.newPage(); Paragraph textParagraph = new Paragraph("Hello world."); document.add(textParagraph); document.close(); File tmpFile = File.createTempFile("test-", ".pdf"); LOG.debug("tmp file: " + tmpFile.getAbsolutePath()); FileUtils.writeByteArrayToFile(tmpFile, baos.toByteArray()); // eID PcscEid pcscEid = new PcscEid(new TestView(), new Messages(Locale.getDefault())); if (false == pcscEid.isEidPresent()) { LOG.debug("insert eID card"); pcscEid.waitForEidPresent(); } List<X509Certificate> signCertificateChain = pcscEid.getSignCertificateChain(); Certificate[] certs = new Certificate[signCertificateChain.size()]; for (int idx = 0; idx < certs.length; idx++) { certs[idx] = signCertificateChain.get(idx); } // open the pdf FileInputStream pdfInputStream = new FileInputStream(tmpFile); File signedTmpFile = File.createTempFile("test-signed-", ".pdf"); PdfReader reader = new PdfReader(pdfInputStream); FileOutputStream pdfOutputStream = new FileOutputStream(signedTmpFile); PdfStamper stamper = PdfStamper.createSignature(reader, pdfOutputStream, '\0', null, true); // add extra page Rectangle pageSize = reader.getPageSize(1); int pageCount = reader.getNumberOfPages(); int extraPageIndex = pageCount + 1; stamper.insertPage(extraPageIndex, pageSize); // calculate unique signature field name int signatureNameIndex = 1; String signatureName; AcroFields existingAcroFields = reader.getAcroFields(); List<String> existingSignatureNames = existingAcroFields.getSignatureNames(); do { signatureName = "Signature" + signatureNameIndex; signatureNameIndex++; } while (existingSignatureNames.contains(signatureName)); LOG.debug("new unique signature name: " + signatureName); PdfSignatureAppearance signatureAppearance = stamper.getSignatureAppearance(); signatureAppearance.setCrypto(null, certs, null, PdfSignatureAppearance.SELF_SIGNED); signatureAppearance.setCertificationLevel(PdfSignatureAppearance.CERTIFIED_NO_CHANGES_ALLOWED); signatureAppearance.setReason("PDF Signature Test"); signatureAppearance.setLocation("Belgium"); signatureAppearance.setVisibleSignature(new Rectangle(54, 440, 234, 566), extraPageIndex, signatureName); signatureAppearance.setExternalDigest(new byte[128], new byte[20], "RSA"); signatureAppearance.preClose(); byte[] content = IOUtils.toByteArray(signatureAppearance.getRangeStream()); byte[] hash = MessageDigest.getInstance("SHA-1").digest(content); byte[] signatureBytes = pcscEid.sign(hash, "SHA-1"); pcscEid.close(); PdfSigGenericPKCS sigStandard = signatureAppearance.getSigStandard(); PdfPKCS7 signature = sigStandard.getSigner(); signature.setExternalDigest(signatureBytes, hash, "RSA"); PdfDictionary dictionary = new PdfDictionary(); dictionary.put(PdfName.CONTENTS, new PdfString(signature.getEncodedPKCS1()).setHexWriting(true)); signatureAppearance.close(dictionary); LOG.debug("signed tmp file: " + signedTmpFile.getAbsolutePath()); // verify the signature reader = new PdfReader(new FileInputStream(signedTmpFile)); AcroFields acroFields = reader.getAcroFields(); ArrayList<String> signatureNames = acroFields.getSignatureNames(); for (String signName : signatureNames) { LOG.debug("signature name: " + signName); LOG.debug("signature covers whole document: " + acroFields.signatureCoversWholeDocument(signName)); LOG.debug("document revision " + acroFields.getRevision(signName) + " of " + acroFields.getTotalRevisions()); PdfPKCS7 pkcs7 = acroFields.verifySignature(signName); Calendar signDate = pkcs7.getSignDate(); LOG.debug("signing date: " + signDate.getTime()); LOG.debug("Subject: " + PdfPKCS7.getSubjectFields(pkcs7.getSigningCertificate())); LOG.debug("Document modified: " + !pkcs7.verify()); Certificate[] verifyCerts = pkcs7.getCertificates(); for (Certificate certificate : verifyCerts) { X509Certificate x509Certificate = (X509Certificate) certificate; LOG.debug("cert subject: " + x509Certificate.getSubjectX500Principal()); } } /* * Reading the signature using Apache PDFBox. */ PDDocument pdDocument = PDDocument.load(signedTmpFile); COSDictionary trailer = pdDocument.getDocument().getTrailer(); /* * PDF Reference - third edition - Adobe Portable Document Format - * Version 1.4 - 3.6.1 Document Catalog */ COSDictionary documentCatalog = (COSDictionary) trailer.getDictionaryObject(COSName.ROOT); /* * 8.6.1 Interactive Form Dictionary */ COSDictionary acroForm = (COSDictionary) documentCatalog.getDictionaryObject(COSName.ACRO_FORM); COSArray fields = (COSArray) acroForm.getDictionaryObject(COSName.FIELDS); for (int fieldIdx = 0; fieldIdx < fields.size(); fieldIdx++) { COSDictionary field = (COSDictionary) fields.getObject(fieldIdx); String fieldType = field.getNameAsString("FT"); if ("Sig".equals(fieldType)) { COSDictionary signatureDictionary = (COSDictionary) field.getDictionaryObject(COSName.V); /* * TABLE 8.60 Entries in a signature dictionary */ COSString signatoryName = (COSString) signatureDictionary.getDictionaryObject(COSName.NAME); if (null != signatoryName) { LOG.debug("signatory name: " + signatoryName.getString()); } COSString reason = (COSString) signatureDictionary.getDictionaryObject(COSName.REASON); if (null != reason) { LOG.debug("reason: " + reason.getString()); } COSString location = (COSString) signatureDictionary.getDictionaryObject(COSName.LOCATION); if (null != location) { LOG.debug("location: " + location.getString()); } Calendar signingTime = signatureDictionary.getDate(COSName.M); if (null != signingTime) { LOG.debug("signing time: " + signingTime.getTime()); } String signatureHandler = signatureDictionary.getNameAsString(COSName.FILTER); LOG.debug("signature handler: " + signatureHandler); } } }
From source file:Utilities.GlobalVar.java
public static void updateSeqNum(PDDocument doc, String cycle) throws IOException { int sequenceNum = 1; List pages = doc.getDocumentCatalog().getAllPages(); for (int i = 0; i < pages.size(); i++) { PDPage page = (PDPage) pages.get(i); PDStream contents = page.getContents(); PDFStreamParser parser = new PDFStreamParser(contents.getStream()); parser.parse();/*from ww w .j a va2s .c o m*/ List tokens = parser.getTokens(); for (int j = 0; j < tokens.size(); j++) { Object next = tokens.get(j); if (next instanceof PDFOperator) { PDFOperator op = (PDFOperator) next; // Tj and TJ are the two operators that display strings in a PDF if (op.getOperation().equals("Tj")) { // Tj takes one operator and that is the string // to display so lets update that operator COSString previous = (COSString) tokens.get(j - 1); String string = previous.getString(); // System.out.println(string); // System.out.println(string.charAt(5)); if (string.contains("/0")) { String seq = cycle + "/" + GlobalVar.globalCountGenerator5Digit(sequenceNum); string = string.replaceFirst(string, seq); previous.reset(); previous.append(string.getBytes("ISO-8859-1")); sequenceNum++; break; } //Word you want to change. Currently this code changes word "Solr" to "Solr123" previous.reset(); previous.append(string.getBytes("ISO-8859-1")); } else if (op.getOperation().equals("TJ")) { COSArray previous = (COSArray) tokens.get(j - 1); for (int k = 0; k < previous.size(); k++) { Object arrElement = previous.getObject(k); if (arrElement instanceof COSString) { COSString cosString = (COSString) arrElement; String string = cosString.getString(); // System.out.println(string); if (string.contains("/00")) { String seq = cycle + "/" + GlobalVar.globalCountGenerator5Digit(sequenceNum); string = string.replaceFirst(string, seq); cosString.reset(); cosString.append(string.getBytes("ISO-8859-1")); sequenceNum++; break; } // Currently this code changes word "Solr" to "Solr123" cosString.reset(); cosString.append(string.getBytes("ISO-8859-1")); // break; } } } } } // now that the tokens are updated we will replace the page content stream. PDStream updatedStream = new PDStream(doc); OutputStream out = updatedStream.createOutputStream(); ContentStreamWriter tokenWriter = new ContentStreamWriter(out); tokenWriter.writeTokens(tokens); page.setContents(updatedStream); } }