Java 使用ApachePOI识别隐藏文本Word 2003/2007
我正在将Word(2003和2007)文档转换为HTML格式。我已设法从Word文档中读取文本、格式等。但是文档包含一些隐藏的文本,如“标题更改历史记录”,这些文本不需要显示在页面上。有没有办法从Word文档中识别隐藏的文本Java 使用ApachePOI识别隐藏文本Word 2003/2007,java,ms-word,apache-poi,Java,Ms Word,Apache Poi,我正在将Word(2003和2007)文档转换为HTML格式。我已设法从Word文档中读取文本、格式等。但是文档包含一些隐藏的文本,如“标题更改历史记录”,这些文本不需要显示在页面上。有没有办法从Word文档中识别隐藏的文本 任何帮助都将非常有价值。我不确定这是否是一个完整(甚至准确)的解决方案,但对于DOCX格式的文件,您似乎可以检查字符运行是否被隐藏 XWPFRun cr; if (cr.getCTR().getRPr().getVanish() != null){ // it is
任何帮助都将非常有价值。我不确定这是否是一个完整(甚至准确)的解决方案,但对于DOCX格式的文件,您似乎可以检查字符运行是否被隐藏
XWPFRun cr;
if (cr.getCTR().getRPr().getVanish() != null){
// it is hidden
}
这是从XML的反向工程中得到的,至少在我的使用中它似乎是有效的。如果您能提供更多的信息输入,以及在旧的二进制文件格式中执行相同操作的方法,我们将非常高兴。以下代码片段有助于识别文本是否隐藏 POIFSFS=null
boolean isHidden = false;
try {
fs = new POIFSFileSystem(new FileInputStream(filesname));
HWPFDocument doc = new HWPFDocument(fs);
WordExtractor we = new WordExtractor(doc);
String[] paragraphs = we.getParagraphText();
System.out.println("Word Document has " + paragraphs.length
+ " paragraphs");
Range range = doc.getRange();
for (int k = 0; k < range.numParagraphs(); k++) {
org.apache.poi.hwpf.usermodel.Paragraph paragraph = range
.getParagraph(k);
paragraph.text().trim();
paragraph.text().replaceAll("\\cM?\r?\n", "");
for (int j = 0; j < paragraph.numCharacterRuns(); j++) {
org.apache.poi.hwpf.usermodel.CharacterRun cr = paragraph
.getCharacterRun(j);
if (cr.isVanished()) {
// it is hidden
System.out.println("text is hidden ");
isHidden = true;
break;
}
}
boolean ishiden=false;
试一试{
fs=新的POIFSFISTEM(新的FileInputStream(fileName));
HWPF文件文件=新的HWPF文件(fs);
WordExtractor we=新的WordExtractor(文档);
String[]段落=we.getParagraphText();
System.out.println(“Word文档有”+段落长度
+“段落”);
Range Range=doc.getRange();
对于(int k=0;k
根据我在POI文档中看到的内容,您只能读取和操作标题,但没有检索历史记录的选项。如果有人能够锁定相关参考,很高兴承认自己错了。