docx文件中缺少的属性

时间:2013-07-01 14:38:43

标签: java ms-word base64

我遇到的情况是我从网络服务接收一个ms-word(docx)文档作为流/ bytearray。

然后我尝试重新创建该文件,使其具有与以前相同的名称和内容。

如果我比较原始文件和下载后创建的文件,那么它们是相同的。

然而,当我尝试在单词中打开新单词时,我收到错误,如果接受riscs,我可以打开它。

如果我查看windows中文件的属性,那么新文件会丢失很多信息。

任何人都知道如何重新创建属性,以便可以无误地打开文件吗?


只是一条额外的信息..如果我使用.doc(word97-2003)文件一切正常,只有.docx文件是一个问题(也.xlsx和所有办公室2007-2010文件)。

这是我创建文件的代码..

private static void saveBytesAsFile(String path, String filename, byte[] data){
    try {
        File dir = new File(path);
        dir.mkdirs();
        OutputStream os = new FileOutputStream(path + "/" + filename);
        os.write(data);
        os.flush();
        os.close();
    } catch (FileNotFoundException fnfe) {
        fnfe.printStackTrace();
    } catch (IOException ioe) {
        ioe.printStackTrace();
    }
}

我在notepad ++中比较了原始文件和重新创建的文件,得到的结果是相同的。

这就是我看到一些属性丢失的原因。

Image of properties

这些是我从单词中得到的警告:

如果我按第一个确定,第二个是,我可以打开文件。

Word Warnings

2 个答案:

答案 0 :(得分:0)

如果要求您“接受风险”,那么这听起来更像是从互联网下载文档时的默认Word行为,而不是错误。您可以从Word选项,信任中心更改Word行为(假设您使用的是Word 2007或更高版本)。

所以我怀疑缺少的属性是个问题。通过在构建新文档之前更改系统时钟(基于先前文档的内容),可以更改要重新创建的文档的创建日期。我不推荐这些步骤。

答案 1 :(得分:0)

事实证明,这些属性没有问题。

简单地说,在提供文档数据的服务中的某个地方,在文件数据的末尾添加了一个额外的空白字符。

这导致预期文件长度与实际文件长度不匹配,因此办公室组件在尝试打开文档时抱怨。

这也阻止了文件的属性被解析。

令人讨厌的是,文件比较工具没有抓住这个。 (或者可能需要对尾随空格进行一些配置而不被忽略。)