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]