hi, i am trying to substitute some text in a work doc.  i wrote a little
program to look for keywords and substitute some text of different lengths.
i couldn't see a way to do this, so i modified the TextPieceTable class as
follows (sorry about the formatting, its outlook):

public int adjustForInsert(TextPiece atp, int length)
{
        int size = _textPieces.size();
        length = length * (atp.usesUnicode() ? 2 : 1);
        atp.setEnd(atp.getEnd() + length);
        boolean adjusting = false;
        for (int x = 0; x < size; x++)
        {
                TextPiece tp = (TextPiece)_textPieces.get(x);
                if (adjusting) {
                        tp.setStart(tp.getStart() + length);
                        tp.setEnd(tp.getEnd() + length);
                }
                adjusting = adjusting || tp.equals(atp);
        }
        return length;
}

here is a snipped of the program that uses POI

HWPFDocument doc = new HWPFDocument(new FileInputStream(filename));
for (Iterator iter = doc.getTextTable().getTextPieces().iterator();
iter.hasNext();) {
        TextPiece tp = (TextPiece) iter.next();
        System.out.println(tp.getStringBuffer());
        StringBuffer sb = tp.getStringBuffer();
        int substart = sb.toString().indexOf(COLUMN);
        int start = substart;
        int totlen = 0;
        while (substart >= 0) {
                String text = "substitute " + start;
                int end = sb.toString().substring(start).indexOf(")") +
start;
                System.out.println(sb.substring(start, end + 1) + " => "+
text);
                sb.replace(start, end + 1, text);
                int diff = text.length() - (end - start) - 1;
                int adjustedLength = doc.getTextTable().adjustForInsert(tp,
diff);
                //doc.getCharacterTable().adjustForInsert(start,
adjustedLength);
                //doc.getParagraphTable().adjustForInsert(start,
adjustedLength);
                //doc.getSectionTable().adjustForInsert(textStart,
adjustedLength);
                totlen = totlen + adjustedLength;
                substart = sb.toString().substring(end).indexOf(COLUMN);
                start = end + substart;
        }
        doc.getParagraphTable().adjustForInsert(0, totlen);
}
OutputStream out = new FileOutputStream("out_" + filename);
doc.write(out);

this kind of works, but the resultant doc, although readable, is corrupted.
any ideas how to do this better?

thanks, Mitchell

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to