如何使用POI在MS字中突出显示Pargraph的文本 [英] How to Highlight a text for a Pargraph in MS word using POI
问题描述
我正在为word文档开发一个比较工具,只要文档中有差异我需要突出显示段落中的子字符串。当我尝试突出显示使用run时,它突出显示整个段落而不是子字符串。
I am developing a compare tool for the word document, whenever there is difference in both the document i need to highlight the substring in the paragraph.When i try to highlight using run, its highlighting whole paragraph instead of the sub string.
你能指导我们,我怎样才能为子字符串实现这个目标。
Can you please guide us, how can i achieve this for a substring.
推荐答案
我遇到了同样的问题。在这里,我发布了一个示例方法,其中突出显示运行中包含的子字符串。
I had the same problem. Here I post a sample method where you highlight a substring contained in a run.
private int highlightSubsentence(String sentence, XWPFParagraph p, int i) {
//get the current run Style - here I might need to save the current style
XWPFRun currentRun = p.getRuns().get(i);
String currentRunText = currentRun.text();
int sentenceLength = sentence.length();
int sentenceBeginIndex = currentRunText.indexOf(sentence);
int addedRuns = 0;
p.removeRun(i);
//Create, if necessary, a run before the highlight part
if (sentenceBeginIndex > 0) {
XWPFRun before = p.insertNewRun(i);
before.setText(currentRunText.substring(0, sentenceBeginIndex));
//here I might need to re-introduce the style of the deleted run
addedRuns++;
}
// highlight the interesting part
XWPFRun sentenceRun = p.insertNewRun(i + addedRuns);
sentenceRun.setText(currentRunText.substring(sentenceBeginIndex, sentenceBeginIndex + sentenceLength));
currentStyle.copyStyle(sentenceRun);
CTShd cTShd = sentenceRun.getCTR().addNewRPr().addNewShd();
cTShd.setFill("00FFFF");
//Create, if necessary, a run after the highlight part
if (sentenceBeginIndex + sentenceLength != currentRunText.length()) {
XWPFRun after = p.insertNewRun(i + addedRuns + 1);
after.setText(currentRunText.substring(sentenceBeginIndex + sentenceLength));
//here I might need to re-introduce the style of the deleted run
addedRuns++;
}
return addedRuns;
}
您可能需要保存您删除的运行的格式样式才能使用旧格式进行新运行。
You might need to save the formatting style of the run you delete in order to have the new runs with the old formatting.
此外,如果您需要突出显示的字符串分布在多个运行中,则需要突出显示所有这些字符串,但核心方法是我发布的方法。
Also, if the string you need to highlight is spread over more than one run, you will need to highlight all of them, but the core method is the one I posted.
这篇关于如何使用POI在MS字中突出显示Pargraph的文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!