Thanks Mark. You have been very helpful in assisting me.
I would defintely give a try to SWT/OLE and let you know how it works.
I have one question though regarding SWT/OLE, iam going to deploy this java
code in AS400 system.
We have java installed in AS400 system and POI works in AS400 like windows.
But not sure for this SWT/OLE. Do you have an idea on this or i can try it
and see.

I like to download the code and try it. I have to install SVN and meanwhile
i will try with
SWT/OLE. I will let u know how it goes.

Thanks
Karthik

On Mon, Aug 10, 2009 at 2:07 AM, MSB <[email protected]> wrote:

>
> HWPF is still very immature and I do not think that with the project in
> it's
> current state there is a way to do any better than we already have, sorry.
> With regard to the SWT/OLE technique, can I ask did you download from
> Rapidshare the example I posted? If so, then you need to unzip the archive
> into a folder and open the file called readme.rtf. It contains instructions
> telling you how to proceed. Before going any further, I do need to stress
> again that OLE will only work if you are running on a Windpws PC and a copy
> of Word is installed onto the machine where you will be running the code.
>
> Off of the top of my head, the first thing to do is unzip the SWT archive -
> is has a name something like swt-3.2.3-win32.zip and contains two files you
> are interested in. The first is the java achive which is called swt.jar.
> Extract that into a folder and place it on your classpath so the code I
> sent
> will compile and run. Secondly, you need to extract a dll and place it into
> the system32 subfolder of your windows folder on the computers hard drive.
> Again, I cannot remember the name of the dll exactly but think it will be
> something like this - swt-win32-3236.dll.
>
> Now, you are ready to compile and run the file of code that is also
> contained in the archive. Extract it to a folder somewhere on you computer,
> open it using whichever editor you like to use, make sure that the
> -classpath environment variable is set so that it can access the swt.jar
> archive and then you should be able to compile and run the code. Usually, I
> place some code into the main() method that explains what to do and how to
> run the class and if I remember correctly, that class is very simple to use
> and you may be able to deduce from the code that is there how to search for
> and replace strings of text on Word documents. At this stage, do not worry
> at all about how the class does what it does. There is a vile mixture of
> VBA
> and java in there which will be hard to decipher until you are a little
> more
> familiar with the OLE technique. The class should run and ought to
> successfully search for and replace items in a Word document. It will seem
> to run slowly. This is because in the background, it is loading Word,
> locating the file, perfroming the search and replace operation, saving the
> file away again and then closing Word down.
>
> As to patching HWPF, the first thing you need to do is figure out where the
> problem is and the best way to accomplish this is to try to replace a
> string
> of text with one that is far longer. HWPF should respond by throwing an
> exception and the stacktrace will help you to identify which class and
> which
> method is the source of that exception. Next, have a look at this page -
> http://poi.apache.org/getinvolved/index.html - it explains a little of how
> to get involved with developing the API. It asumes that you will commit
> your
> changes to the project - which you are not of course forced to do - but is
> a
> good place to start. Then, as suggested on that page, use SVN (subversion)
> to checkout a copy of the project's code and see if you can figure out
> where
> the changes need to be made and, if so, modify your checked out copy of the
> project's code. Once you get to that poiont, you can think about whether or
> not you wish to submit the changes as a patch and, if so, the easiest way
> to
> do this would be to post to the list again saying that you have a patch you
> would like to commit. Someone will respond and help you to commit the patch
> to the project.
>
> Sorry to say that I am not the best person to talk you through the process
> of developing and commiting patches as I am still just working through that
> myself. If you do want to work on HWPF after looking at the code then I
> would suggest contacting Nick Burch - [email protected] - the project chair
> and asking him how to proceed.
>
> Yours
>
> Mark B
>
>
> karthik-33 wrote:
> >
> > Mark, Thanks for trying out. I tried the same way you did...
> > Can you suggest me a way to resolve this..
> > What is the option one to try patch HWPF.. May be i can try if you have
> > any
> > new way to approach this problem...
> > And the option two, SWT/OLE iam new to it and i dont know how to work on
> > that..
> >
> > Thanks
> > Karthik
> > On Sun, Aug 9, 2009 at 6:07 AM, MSB <[email protected]> wrote:
> >
> >>
> >> This morning, I had the chance to try what I spoke of in my previous
> >> email
> >> -
> >> using Java to replace text in a copy of the Paragraph's text and then
> >> replacing all of the text in the Paragraph with the modified copy. It
> >> worked
> >> but only up to a point; if the replacement text was exactly the same
> >> length
> >> as the search term, this technique worked but any differences in length
> >> rendered the resulting file corrupt; and I am guessing that this is the
> >> same
> >> problem as you originally encountered.
> >>
> >> So, I think I can conclude that if you are trying to replace the search
> >> term
> >> with a String of text that is longer than it, you will run into
> problems.
> >> As
> >> long as the replacement is shorter than the search term - or at most the
> >> same length - then the previous piece of code I posted seems to work
> well
> >> enough.
> >>
> >> To my mind then you have two options. Option 1 would be to patch HWPF so
> >> that it will work as you wish - the API is very immature and has not
> been
> >> the focus of the same sort of development effort as has HSSF for
> example.
> >> Option 2 is to use an alternative such as SWT/OLE or OpenOffice. The
> >> limitation with the OpenOffice approach is that whilst it can read
> >> OpenXML
> >> documents - Office 2007 and beyond with the .docx or similar extension -
> >> it
> >> cannot save a document in this format.
> >>
> >> Sorry for the bad news.
> >>
> >> Yours
> >>
> >> Mark B
> >>
> >>
> >> karthik-33 wrote:
> >> >
> >> > Hi Mark, Thanks for sending this program.
> >> > I tried this program with POI 3.2 final version, which iam currently
> >> > using.
> >> > CharaterRun doesnt behave consistently the same way, sometimes it
> >> splits
> >> > the
> >> > paragraph text into more number of Character run, sometimes it doesnt
> >> > split
> >> > and i see the whole paragraph text in one character run. So the search
> >> > text
> >> > is not getting replaced.
> >> > Is there anyway to solve this issue?
> >> > On Sat, Aug 8, 2009 at 6:34 AM, MSB <[email protected]> wrote:
> >> >
> >> >>
> >> >> Here is the HWPF based code that I put together to play around with.
> >> It
> >> >> was
> >> >> written a very long time ago so I am not sure what testing I
> undertook
> >> >> and
> >> >> exactly what the results were but I have run it this morning just to
> >> >> ensure
> >> >> that
> >> >> it does not crash the PC and all seems to be well. This section has
> >> been
> >> >> cut
> >> >> from a much larger class that is full of other test code that I play
> >> >> around
> >> >> with peridocically. Everything you need is there I believe but on the
> >> >> off-chance
> >> >> that it calls another method whose source I have neglected to
> include,
> >> >> just
> >> >> drop
> >> >> an email to the list please.
> >> >>
> >> >> Currently, I am running POI version 3.5 beta 7 on a PC operating
> under
> >> >> Windows XP SP2. Office 2007 is installed now and it seems able to
> open
> >> >> the
> >> >> files this code produces quite happily. In the back of my mind, I
> seem
> >> to
> >> >> remember that the files produced by some search and replace code I
> put
> >> >> together could be opened but not modified; I tested that problem this
> >> >> morning
> >> >> and the files this code produces seem fine, I can open them, make
> >> changes
> >> >> and
> >> >> then save the results again. But do please be prepared for problems
> >> like
> >> >> that.
> >> >>
> >> >> Again, can I emphasise this is test code; it is scruffy and there are
> >> >> going
> >> >> to
> >> >> be variables I put in there so that I could monitor the progress of
> >> the
> >> >> code
> >> >> by dumping messages to the screen. As you go through, if something
> >> seems
> >> >> to
> >> >> be superfluous, then this is likely the reason and you can comment it
> >> out
> >> >> or
> >> >> delete it.
> >> >>
> >> >> Good luck and I do hope it all works. If you have any problems, just
> >> drop
> >> >> a
> >> >> message onto the list.
> >> >>
> >> >> Yours
> >> >>
> >> >> Mark B
> >> >>
> >> >>
> >> >> import org.apache.poi.poifs.filesystem.POIFSFileSystem;
> >> >> import org.apache.poi.hwpf.HWPFDocument;
> >> >> import org.apache.poi.hwpf.usermodel.Range;
> >> >> import org.apache.poi.hwpf.usermodel.Paragraph;
> >> >> import org.apache.poi.hwpf.usermodel.CharacterRun;
> >> >>
> >> >> import java.io.File;
> >> >> import java.io.FileOutputStream;
> >> >> import java.io.FileInputStream;
> >> >> import java.io.BufferedOutputStream;
> >> >> import java.io.BufferedInputStream;
> >> >> import java.util.HashMap;
> >> >> import java.util.Iterator;
> >> >>
> >> >> /**
> >> >>  * This code is provided on an "AS IS" BASIS, WITHOUT WARRANTIES OR
> >> >>  * CONDITIONS OF ANY KIND, either express or implied. It is not
> >> intended
> >> >> to
> >> >>  * be used in a 'production' environment without undergoing rigorous
> >> >> testing.
> >> >>  *
> >> >>  * With that out of the way, an instance of this class can be used to
> >> >> search
> >> >> for
> >> >>  * and replace Strings of text within a Word document. To see how the
> >> >> code
> >> >> may
> >> >>  * be used, look into the main() method for examples.
> >> >>  *
> >> >>  * Note the replacements made by the code contained within this class
> >> >> ignore
> >> >>  * any formatting that may have been applied to the text that is
> >> >> replaced.
> >> >> That
> >> >>  * is to say that if the text was originally formatted to use the
> >> Arial
> >> >> font,
> >> >>  * was sized to 24 points, emboldened, underlined and red in colour,
> >> then
> >> >> all
> >> >>  * of this will be lost if it is replaced. Further if any text is
> >> >> replaced
> >> >> in a
> >> >>  * Paragraph, all the formatting applied to that Paragraph's contents
> >> is
> >> >> likely
> >> >>  * to be lost.
> >> >>  *
> >> >>  * @author Mark Beardsley [msb at apache.org]
> >> >>  * @version 1.00 8th August 2009 (cannot remember when originally put
> >> >> together)
> >> >>  */
> >> >> public class SearchReplace {
> >> >>
> >> >>
> >> >>        /**
> >> >>         * Search for and replace a single occurrence of a string of
> >> text
> >> >> within a
> >> >>         * Word document.
> >> >>         *
> >> >>         * Note that no checks are made on the parameter's values;
> that
> >> is
> >> >> to say
> >> >>         * that the file named in the InputFilename parameter will not
> >> be
> >> >> checked
> >> >>         * to ensure the file exists and neither of the searchTerm nor
> >> >>         * replacementTerm parameters will be checked to ensure they
> >> are
> >> >> not
> >> >> null.
> >> >>         * Also, note that I have never tested passing the same String
> >> to
> >> >> the
> >> >>         * inputFilename and outputFilename parameters but cannot see
> >> why
> >> >> that
> >> >>         * should not be possible.
> >> >>         *
> >> >>         * @param inputFilename An instance of the String class that
> >> >> encapsulates
> >> >>         *                      the name of and path to a Word
> document
> >> >> which is
> >> >>         *                      in the binary (OLE2CDF) format. The
> >> >> contents
> >> >> of
> >> >> this
> >> >>         *                      document will be searched for
> >> occurrences
> >> >> of
> >> >> the
> >> >>         *                      search term.
> >> >>         * @param outputFilename An instance of the String class that
> >> >> encapsulates
> >> >>         *                       the name of and path to a Word
> >> document
> >> >> which is
> >> >>         *                       in the binary (OLE2CDF) format. This
> >> >> document will
> >> >>         *                       contain the results of the search and
> >> >> replace
> >> >>         *                       operation.
> >> >>         * @param searchTerm An instance of the String class that
> >> >> encapsulates a
> >> >>         *                   series of characters, a word or words.
> The
> >> >> document
> >> >>         *                   will be searched for occurrences of this
> >> >> String.
> >> >>         * @param replacementTerm An instance of the String class that
> >> >> contains a
> >> >>         *                        series of characters, a word or
> >> words.
> >> >> The
> >> >> String
> >> >>         *                        encapsulated by the searchTerm
> >> parameter
> >> >> will be
> >> >>         *                        replaced by the 'contents' of this
> >> >> parameter.
> >> >>         *
> >> >>         */
> >> >>        public void searchAndReplace(String inputFilename,
> >> >>                                 String outputFilename,
> >> >>                                 String searchTerm,
> >> >>                                 String replacementText) {
> >> >>
> >> >>        File inputFile = null;
> >> >>        File outputFile = null;
> >> >>        FileInputStream fileIStream = null;
> >> >>        FileOutputStream fileOStream = null;
> >> >>        BufferedInputStream bufIStream = null;
> >> >>        BufferedOutputStream bufOStream = null;
> >> >>        POIFSFileSystem fileSystem = null;
> >> >>        HWPFDocument document = null;
> >> >>        Range docRange = null;
> >> >>        Paragraph paragraph = null;
> >> >>        CharacterRun charRun = null;
> >> >>        int numParagraphs = 0;
> >> >>        int numCharRuns = 0;
> >> >>        String text = null;
> >> >>
> >> >>        try {
> >> >>            // Create an instance of the POIFSFileSystem class and
> >> >>            // attach it to the Word document using an InputStream.
> >> >>            inputFile = new File(inputFilename);
> >> >>            fileIStream = new FileInputStream(inputFile);
> >> >>            bufIStream = new BufferedInputStream(fileIStream);
> >> >>            fileSystem = new POIFSFileSystem(bufIStream);
> >> >>            document = new HWPFDocument(fileSystem);
> >> >>
> >> >>            // Get the overall Range object for the document. Note the
> >> >>            // use of the getRange() method and not the
> >> getOverallRange()
> >> >>            // method, this is just historic - when the code was
> >> >> originally
> >> >>            // written, I do not believe the latter method was part of
> >> the
> >> >> API.
> >> >>            docRange = document.getRange();
> >> >>
> >> >>            // Get the number of Paragraph(s) in the overall range and
> >> >> iterate
> >> >>            // through them
> >> >>            numParagraphs = docRange.numParagraphs();
> >> >>            for(int i = 0; i < numParagraphs; i++) {
> >> >>
> >> >>                // Get a Paragraph and recover the text from it. This
> >> step
> >> >> is
> >> >> far from
> >> >>                // necessary and I think I only got the text so that I
> >> >> could
> >> >> print
> >> >>                // it to screen as a diagnostic check to ensure that
> >> the
> >> >> Paragraph
> >> >>                // contained the text I was searching for. Experiment
> >> with
> >> >> this.
> >> >>                paragraph = docRange.getParagraph(i);
> >> >>                text = paragraph.text();
> >> >>
> >> >>                // Get the number of CharacterRuns in the Paragraph
> >> >>                numCharRuns = paragraph.numCharacterRuns();
> >> >>                for(int j = 0; j < numCharRuns; j++) {
> >> >>
> >> >>                        // Get a character run and recover it's text -
> >> >> note
> >> >> that
> >> >>                        // the same text variable is used as for the
> >> >> Paragraph
> >> >> above.
> >> >>                        // So, it MUST be safe to remove the text =
> >> >> paragraph.text()
> >> >>                        // line above.
> >> >>                    charRun = paragraph.getCharacterRun(j);
> >> >>                    text = charRun.text();
> >> >>
> >> >>                    // Check to see if the text of the CharacterRun
> >> >> contains
> >> >> the
> >> >>                    // search term. If it does, find out where that
> >> term
> >> >> starts
> >> >>                    // and call the replaceText() method passing the
> >> >> index.
> >> >>                    // Maybe this is the key difference between what
> we
> >> >> are
> >> >>                    // doing.
> >> >>                    if(text.contains(searchTerm)) {
> >> >>                        int start = text.indexOf(searchTerm);
> >> >>                        charRun.replaceText(searchTerm,
> >> replacementText,
> >> >> start);
> >> >>                    }
> >> >>                }
> >> >>            }
> >> >>
> >> >>            // Close the InputStream
> >> >>            bufIStream.close();
> >> >>            bufIStream = null;
> >> >>
> >> >>            // Open an OutputStream and write the document away.
> >> >>            outputFile = new File(outputFilename);
> >> >>            fileOStream = new FileOutputStream(outputFile);
> >> >>            bufOStream = new BufferedOutputStream(fileOStream);
> >> >>
> >> >>            document.write(bufOStream);
> >> >>
> >> >>        }
> >> >>        catch(Exception ex) {
> >> >>            System.out.println("Caught an: " +
> >> ex.getClass().getName());
> >> >>            System.out.println("Message: " + ex.getMessage());
> >> >>            System.out.println("Stacktrace follows.............");
> >> >>            ex.printStackTrace(System.out);
> >> >>        }
> >> >>        finally {
> >> >>            if(bufOStream != null) {
> >> >>                try {
> >> >>                    //bufOStream.flush();
> >> >>                    bufOStream.close();
> >> >>                    bufOStream = null;
> >> >>                }
> >> >>                catch(Exception ex) {
> >> >>
> >> >>                }
> >> >>            }
> >> >>            if(bufIStream != null) {
> >> >>                try {
> >> >>                    bufIStream.close();
> >> >>                    bufIStream = null;
> >> >>                }
> >> >>                catch(Exception ex) {
> >> >>                    // I G N O R E //
> >> >>                }
> >> >>            }
> >> >>        }
> >> >>
> >> >>    }
> >> >>
> >> >>    /**
> >> >>         * Search for and replace a single occurrence of a string of
> >> text
> >> >> within a
> >> >>         * Word document.
> >> >>         *
> >> >>         * Note that no checks are made on the parameter's values;
> that
> >> is
> >> >> to say
> >> >>         * that the file named in the InputFilename parameter will not
> >> be
> >> >> checked
> >> >>         * to ensure the file exists and neither of the searchTerm nor
> >> >>         * replacementTerm pare,eters will be checked to ensure they
> >> are
> >> >> not
> >> >> null.
> >> >>         * Also, note that I have never tested passing the same String
> >> to
> >> >> the
> >> >>         * inputFilename and outputFilename parameters but cannot see
> >> why
> >> >> that
> >> >>         * should not be possible.
> >> >>         *
> >> >>         * @param inputFilename An instance of the String class that
> >> >> encapsulates
> >> >>         *                      the name of and path to a Word
> document
> >> >> which is
> >> >>         *                      in the binary (OLE2CDF) format. The
> >> >> contents
> >> >> of
> >> >> this
> >> >>         *                      document will be searched for
> >> occurrences
> >> >> of
> >> >> the
> >> >>         *                      search term.
> >> >>         * @param outputFilename An instance of the String class that
> >> >> encapsulates
> >> >>         *                       the name of and path to a Word
> >> document
> >> >> which is
> >> >>         *                       in the binary (OLE2CDF) format. This
> >> >> document will
> >> >>         *                       contain the results of the search and
> >> >> replace
> >> >>         *                       operation.
> >> >>         * @param replacements An instance of the java.util.HashMap
> >> class
> >> >> that
> >> >>         *                     contains a series of key, value pairs.
> >> Each
> >> >> key
> >> >>         *                     is an instance of the String class that
> >> >> encapsulates
> >> >>         *                     a series of characters, a word or words
> >> >> that
> >> >> the
> >> >>         *                     code will search for and the
> >> accompanying
> >> >> value is
> >> >>         *                     also an instance of the String class
> >> that
> >> >> likewise
> >> >>         *                     encapsulates a series of characters, a
> >> word
> >> >> or
> >> >> words.
> >> >>         *                     The 'contents' of the value's String
> >> will
> >> >> be
> >> >> used to
> >> >>         *                     replace the contents of the key's
> String
> >> if
> >> >> an
> >> >>         *                     occurrence of the latter is found.
> >> >>         */
> >> >>    public void searchAndReplace(String inputFilename,
> >> >>                                 String outputFilename,
> >> >>                                 HashMap<String, String> replacements)
> >> {
> >> >>
> >> >>        File inputFile = null;
> >> >>        File outputFile = null;
> >> >>        FileInputStream fileIStream = null;
> >> >>        FileOutputStream fileOStream = null;
> >> >>        BufferedInputStream bufIStream = null;
> >> >>        BufferedOutputStream bufOStream = null;
> >> >>        POIFSFileSystem fileSystem = null;
> >> >>        HWPFDocument document = null;
> >> >>        Range docRange = null;
> >> >>        Paragraph paragraph = null;
> >> >>        CharacterRun charRun = null;
> >> >>        Set<String> keySet = null;
> >> >>        Iterator<String> keySetIterator = null;
> >> >>        int numParagraphs = 0;
> >> >>        int numCharRuns = 0;
> >> >>        String text = null;
> >> >>        String key = null;
> >> >>        String value = null;
> >> >>
> >> >>        try {
> >> >>            // Create an instance of the POIFSFileSystem class and
> >> >>            // attach it to the Word document using an InputStream.
> >> >>            inputFile = new File(inputFilename);
> >> >>            fileIStream = new FileInputStream(inputFile);
> >> >>            bufIStream = new BufferedInputStream(fileIStream);
> >> >>            fileSystem = new POIFSFileSystem(bufIStream);
> >> >>            document = new HWPFDocument(fileSystem);
> >> >>
> >> >>                        // Get a reference to the overall Range for
> the
> >> >> document
> >> >>                        // and discover how many Paragraphs objects
> >> there
> >> >> are
> >> >>                        // in the document.
> >> >>            docRange = document.getRange();
> >> >>            numParagraphs = docRange.numParagraphs();
> >> >>
> >> >>            // Recover a Set of the keys in the HashMap
> >> >>            keySet = replacements.keySet();
> >> >>
> >> >>            // Step through each Paragraph
> >> >>            for(int i = 0; i < numParagraphs; i++) {
> >> >>                paragraph = docRange.getParagraph(i);
> >> >>                // This line can almost certainly be removed - see
> >> >>                // the comments in the method above.
> >> >>                text = paragraph.text();
> >> >>
> >> >>                // Get the number of CharacterRuns in the Paragraph
> >> >>                // and step through each one.
> >> >>                numCharRuns = paragraph.numCharacterRuns();
> >> >>                for(int j = 0; j < numCharRuns; j++) {
> >> >>                    charRun = paragraph.getCharacterRun(j);
> >> >>
> >> >>                    // Get the text from the CharacterRun and recover
> >> an
> >> >>                    // Iterator to step through the Set of keys.
> >> >>                    text = charRun.text();
> >> >>                    keySetIterator = keySet.iterator();
> >> >>                    while(keySetIterator.hasNext()) {
> >> >>
> >> >>                        // Get the key - which is also the search term
> >> -
> >> >> and
> >> >>                        // check to see if it can be found within the
> >> >>                        // CharacterRuns text.
> >> >>                        key = keySetIterator.next();
> >> >>                        if(text.contains(key)) {
> >> >>
> >> >>                                // If the search term was found in the
> >> >> text,
> >> >> get
> >> >> the
> >> >>                                // matching value from the HashMap,
> >> find
> >> >> out
> >> >> whereabouts
> >> >>                                // in the CharacterRuns text the
> search
> >> >> term
> >> >> is
> >> >>                                // and call the replaceText() method
> to
> >> >> substitute
> >> >>                                // the replacement term for the search
> >> >> term.
> >> >>                            value = replacements.get(key);
> >> >>                            int start = text.indexOf(key);
> >> >>                            charRun.replaceText(key, value, start);
> >> >>
> >> >>                            // Note that this code was added to test
> >> >> whether
> >> >>                            // it was possible to replace multiple
> >> >> occurrences
> >> >>                            // of the search term. I cannot remember
> if
> >> I
> >> >> tested
> >> >>                            // it but believe that it did work; either
> >> >> way,
> >> >>                            // it could be tested now and if succeeds,
> >> >> then
> >> >> the
> >> >>                            // searchAndReplace() method above could
> be
> >> >> modified
> >> >>                            // to include this.
> >> >>                            docRange = document.getRange();
> >> >>                            paragraph = docRange.getParagraph(i);
> >> >>                            charRun = paragraph.getCharacterRun(j);
> >> >>                            text = charRun.text();
> >> >>                        }
> >> >>                    }
> >> >>                }
> >> >>            }
> >> >>
> >> >>            // Close the InputStream
> >> >>            bufIStream.close();
> >> >>            bufIStream = null;
> >> >>
> >> >>            // Open an OutputStream and save the modified document
> >> away.
> >> >>            outputFile = new File(outputFilename);
> >> >>            fileOStream = new FileOutputStream(outputFile);
> >> >>            bufOStream = new BufferedOutputStream(fileOStream);
> >> >>            document.write(bufOStream);
> >> >>        }
> >> >>        catch(Exception ex) {
> >> >>            System.out.println("Caught an: " +
> >> ex.getClass().getName());
> >> >>            System.out.println("Message: " + ex.getMessage());
> >> >>            System.out.println("Stacktrace follows.............");
> >> >>            ex.printStackTrace(System.out);
> >> >>        }
> >> >>        finally {
> >> >>            if(bufIStream != null) {
> >> >>                try {
> >> >>                    bufIStream.close();
> >> >>                    bufIStream = null;
> >> >>                }
> >> >>                catch(Exception ex) {
> >> >>                    // I G N O R E //
> >> >>                }
> >> >>            }
> >> >>            if(bufOStream != null) {
> >> >>                try {
> >> >>                    bufOStream.flush();
> >> >>                    bufOStream.close();
> >> >>                    bufOStream = null;
> >> >>                }
> >> >>                catch(Exception ex) {
> >> >>
> >> >>                }
> >> >>            }
> >> >>        }
> >> >>
> >> >>    }
> >> >>
> >> >>        /**
> >> >>         * The main entry point to the program demonstrating how the
> >> code
> >> >> may
> >> >>         * be utilised.
> >> >>         *
> >> >>         * @param args An array of type String containing argumnets
> >> passed
> >> >> to the
> >> >>         *             program on execution.
> >> >>         */
> >> >>        public static void main(String[] args) {
> >> >>                SearchReplace replacer = new SearchReplace();
> >> >>
> >> >>                // To serach for and replace single items. Note, the
> >> code
> >> >> has not, at
> >> >>                // least as far as I can remember, been tested by
> >> passing
> >> >> the same
> >> >>                // file to both the searchTerm and replacementTerm
> >> >> parameters. It ought
> >> >>                // to work but has NOT been tested I believe.
> >> >>                replacer.searchAndReplace("Document.doc",
>  //
> >> >> Source Document
> >> >>                        "Replaced Document.doc",
> >> >> //
> >> >> Result Document
> >> >>                        "search term",
> >> >> //
> >> >> Search term
> >> >>                        "replacement term");
> >> >> //
> >> >> Replacement term
> >> >>
> >> >>                // To search for and replace a series of items
> >> >>                HashMap<String, String> searchTerms = new
> >> HashMap<String,
> >> >> String>();
> >> >>                searchTerms.put("search term 1", "replacement term
> 1");
> >> >>                searchTerms.put("search term 2", "replacement term
> 2");
> >> >>                searchTerms.put("search term 3", "replacement term
> 3");
> >> >>                searchTerms.put("search term 4", "replacement term
> 4");
> >> >>
> >> >>                replacer.searchAndReplace("Document.doc",    // Source
> >> >> Document
> >> >>                        "Replaced Document.doc",                 //
> >> Result
> >> >> Document
> >> >>                        searchTerms)                             //
> >> >> Search/replacement items
> >> >>         }
> >> >> }
> >> >>
> >> >>
> >> >>
> >> >> karthik-33 wrote:
> >> >> >
> >> >> > Thanks for the reply mark.
> >> >> > I dont think i need to preserve text formatting, but i would like
> to
> >> >> try
> >> >> > your code and see how it works.
> >> >> > I think that would help me too.
> >> >> >
> >> >> > I cant go the open office since my business requirement is to use
> >> >> > microsoft
> >> >> > word documents.
> >> >> > I will be using this search and replace function in the same PC as
> >> that
> >> >> of
> >> >> > the application.
> >> >> >
> >> >> > If you can send me that code, i will try and let u know how it
> >> works.
> >> >> >
> >> >> > Thanks
> >> >> > Karthik
> >> >> >
> >> >> >
> >> >> > On Fri, Aug 7, 2009 at 11:49 AM, MSB <[email protected]>
> >> wrote:
> >> >> >
> >> >> >>
> >> >> >> Can I ask two questions please?
> >> >> >>
> >> >> >> Do you need to preserve the formatting applied to the text? If
> not,
> >> >> then
> >> >> >> I
> >> >> >> think that somewhere I have a piece of HWPF code that does a
> search
> >> >> and
> >> >> >> replace. I am not at all certain about the state of the code and
> >> >> cannot
> >> >> >> remember if I hit the same problem as you - and I may well have -
> >> but
> >> >> I
> >> >> >> am
> >> >> >> willing to look it out if you think it might help.
> >> >> >>
> >> >> >> Secondly, do you have to use HWPF/XWPF? The API is still immature
> >> and
> >> >> it
> >> >> >> is
> >> >> >> really only suitable for realtively simple tasks. Better
> >> alternatives
> >> >> >> might
> >> >> >> be OpenOffice which you can 'control' through it's UNO API or Word
> >> >> itself
> >> >> >> that can be manipulated using OLE. You can ONLY use OLE if you are
> >> >> >> working
> >> >> >> on a windows based PC and you have Word installed on that PC.
> >> >> OpenOffice
> >> >> >> is
> >> >> >> more flexible but it still cannot be used - at least as far as I
> am
> >> >> aware
> >> >> >> -
> >> >> >> as a document server, so it is best to have that application
> >> installed
> >> >> on
> >> >> >> the PC you will be using for the search/replace operation.
> >> >> >>
> >> >> >> Yours
> >> >> >>
> >> >> >> Mark B
> >> >> >>
> >> >> >>
> >> >> >> karthik-33 wrote:
> >> >> >> >
> >> >> >> > I have microsoft office 2007 and while saving the document, i
> >> save
> >> >> it
> >> >> >> as
> >> >> >> > microsoft 2003 document.
> >> >> >> > Iam trying to replace the text using replaceText method in
> >> >> Paragraph.
> >> >> >> > It works fine when the replacement text and search text are of
> >> equal
> >> >> >> > length.
> >> >> >> > It corrupts the document, when the length of the string is
> either
> >> >> >> greater
> >> >> >> > or
> >> >> >> > less.
> >> >> >> > If anyone has gone through the issue and resolved or have any
> >> idea.
> >> >> >> Please
> >> >> >> > let me know, it will be useful for me..
> >> >> >> > Iam not sure what is causing the problem to corrupt the document
> >> >> >> >
> >> >> >> > Code is:
> >> >> >> >
> >> >> >> > String replaceTxt = "Replacement";
> >> >> >> > String searchText = "Orginial";
> >> >> >> > POIFSFileSystem ps = new POIFSFileSystem (new
> >> >> >> > FileInputStream("C:/Document.doc"));
> >> >> >> > HWPFDocument doc = new HWPFDocument ();
> >> >> >> > Range range = doc.getRange();
> >> >> >> > for(int x=0;x<range.numSections();x++)
> >> >> >> > {
> >> >> >> >     Section s = range.getSection(x);
> >> >> >> >     for(int y=0;y<s.numParagraphs();y++)
> >> >> >> >     {
> >> >> >> >         Paragraph p = s.getParagraph(y);
> >> >> >> >         String paraText = p.text();
> >> >> >> >         int offset = paraText.indexOf(searchText );
> >> >> >> >         if(offset != -1)
> >> >> >> >         {
> >> >> >> >              p.replaceText(searchText,replaceTxt,offset);
> >> >> >> >
> >> >> >> >         }
> >> >> >> >     }
> >> >> >> >
> >> >> >> > }
> >> >> >> >
> >> >> >> >
> >> >> >>
> >> >> >> --
> >> >> >> View this message in context:
> >> >> >>
> >> >>
> >>
> http://www.nabble.com/Replace-Text-Problem-%28Document-Corrupt%29---POI-HWPFDocument-tp24864855p24867251.html
> >> >> >> Sent from the POI - User mailing list archive at Nabble.com.
> >> >> >>
> >> >> >>
> >> >> >>
> >> ---------------------------------------------------------------------
> >> >> >> To unsubscribe, e-mail: [email protected]
> >> >> >> For additional commands, e-mail: [email protected]
> >> >> >>
> >> >> >>
> >> >> >
> >> >> >
> >> >> > --
> >> >> > karthik
> >> >> >
> >> >> >
> >> >>
> >> >> --
> >> >> View this message in context:
> >> >>
> >>
> http://www.nabble.com/Replace-Text-Problem-%28Document-Corrupt%29---POI-HWPFDocument-tp24864855p24876942.html
> >> >>  Sent from the POI - User mailing list archive at Nabble.com.
> >> >>
> >> >>
> >> >> ---------------------------------------------------------------------
> >> >> To unsubscribe, e-mail: [email protected]
> >> >> For additional commands, e-mail: [email protected]
> >> >>
> >> >>
> >> >
> >> >
> >> > --
> >> > karthik
> >> >
> >> >
> >>
> >> --
> >> View this message in context:
> >>
> http://www.nabble.com/Replace-Text-Problem-%28Document-Corrupt%29---POI-HWPFDocument-tp24864855p24885699.html
> >> Sent from the POI - User mailing list archive at Nabble.com.
> >>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: [email protected]
> >> For additional commands, e-mail: [email protected]
> >>
> >>
> >
> >
> > --
> > karthik
> >
> >
>
> --
> View this message in context:
> http://www.nabble.com/Replace-Text-Problem-%28Document-Corrupt%29---POI-HWPFDocument-tp24864855p24894775.html
> Sent from the POI - User mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>


-- 
karthik

Reply via email to