Java 使用ApachePOI识别隐藏文本Word 2003/2007

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

我正在将Word(2003和2007)文档转换为HTML格式。我已设法从Word文档中读取文本、格式等。但是文档包含一些隐藏的文本,如“标题更改历史记录”,这些文本不需要显示在页面上。有没有办法从Word文档中识别隐藏的文本


任何帮助都将非常有价值。

我不确定这是否是一个完整(甚至准确)的解决方案,但对于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文档中看到的内容,您只能读取和操作标题,但没有检索历史记录的选项。如果有人能够锁定相关参考,很高兴承认自己错了。