0

Web サービスからストリーム/バイト配列として ms-word (docx) ドキュメントを受け取る状況があります。

次に、以前と同じ名前と内容を付けて、ファイルを再作成しようとします。

元のファイルとダウンロード後に作成されたファイルを比較すると、それらは同一です。

ただし、単語で新しいものを開こうとするとエラーが発生し、リスクを受け入れると開くことができます。

Windows でファイルのプロパティを見ると、新しいファイルには多くの情報がありません。

エラーなしでファイルを開くことができるように、プロパティを再作成する方法を知っている人はいますか?


余分な情報.. .doc (word97-2003) ドキュメントを使用すると、すべて正常に動作しますが、.docx ドキュメントのみが問題になります (.xlsx とすべての Office 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++ で比較したところ、同じであるという結果が得られました。

これは、いくつかのプロパティが欠落していることを確認する方法です。

物件イメージ

これらは私が単語から得た警告

です。最初に[OK]を押し、2番目に[はい]を押すと、とにかくドキュメントを開くことができます。

単語の警告

4

2 に答える 2

0

解決

特性上問題ないことが判明した。

単純に、ドキュメント データを提供するサービスのどこかで、ファイル データの末尾に余分な空白文字が追加されました。

これにより、予想されるファイル長と実際のファイル長が一致しないため、ドキュメントを開こうとしたときに Office コンポーネントからエラーが発生しました。

また、これにより、ファイルのプロパティが解析されなくなりました。

かなり面倒だったのは、ファイル比較ツールがこれをキャッチできなかったことです。(または、末尾のスペースが無視されないように構成する必要があるかもしれません。)

于 2013-08-30T14:35:25.263 に答える
0

「リスクを受け入れる」ように求められた場合、これはインターネットからドキュメントをダウンロードするときのデフォルトの Word の動作のように聞こえますが、エラーではありません。Word の動作は、Word のオプション、セキュリティ センターから変更できます (Word 2007 以降を使用していると仮定します)。

したがって、欠落しているプロパティが問題であるとは思えません。新しいドキュメントを作成する前に (以前のドキュメントの内容に基づいて) システム クロックを変更することにより、再作成するドキュメントの作成日を変更することができます。これらの手順はお勧めしません。

于 2013-07-01T23:06:07.503 に答える