2013-07-01 2 views
0

webservice에서 스트림/bytearray로 ms-word (docx) 문서를받는 상황이 있습니다.속성이 docx 파일에 누락되었습니다.

그런 다음 이전과 동일한 이름과 콘텐츠를 제공하여 파일을 다시 만들려고합니다.

원본 파일과 다운로드 후 만든 파일을 비교하면 동일합니다.

그러나 단어를 새로 열려고하면 오류가 발생하고 risc를 수락하면 열 수 있습니다.

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(); 
    } 
} 

나는 원본과 ++ 메모장에서 다시 파일을 비교, 그들은 동일하다는 결과를 얻었다.

이것은 일부 속성이 누락 된 것을 보는 방법입니다.

Image of properties

내가 단어에서 얻을 경고입니다

내가 처음에 확인을 눌러 네 번째에 내가 어쨌든 문서를 열 수있는 경우. 인터넷이 아닌 오류에서 문서를 다운로드 할 때 당신이 "위험을 받아"하도록 요청하는 경우

Word Warnings

+0

파일을 다시 작성하는 코드를 포함해야합니다. 사람들이 무슨 일이 일어나는지 알아낼 수 있습니다. – Henrik

+0

원본 파일과 다운로드 한 파일을 어떻게 비교합니까? 이러한 속성이 정확히 동일한 파일이라는 것을 나타내는 속성은 무엇입니까? – cyroxx

+0

문제를 해결 한 경우 답변을 게시하십시오. 이것은 SO에서 그것을 수행하는 허용 된 방법입니다. 또한 해결할 제목을 편집하지 마십시오. – maxf130

답변

0

솔루션

그것은 속성에 문제가 없었다고 밝혀졌다.

문서 데이터를 제공 한 서비스의 어딘가에 파일 데이터 끝에 여분의 공백 문자가 추가되었습니다.

이로 인해 예상 파일 길이와 실제 길이가 일치하지 않아 문서를 열려고 할 때 사무실 구성 요소가 불평했습니다.

그리고이 때문에 파일의 구문을 분석 할 수도 없었습니다.

무엇이 귀찮았는지, 파일 비교 도구가이를 파악하지 못했습니다. (또는 무시 될 수없는 후행 공백의 일부 구성이 필요합니다.)

0

다음이 더 기본 워드 행동처럼 들린다. Word 옵션, 보안 센터 (Word 2007 이상을 사용 중이라고 가정)에서 Word 동작을 변경할 수 있습니다.

그래서 누락 된 속성이 문제가 아닌지 의심 스럽습니다. 이전 문서의 내용을 기반으로 새 문서를 작성하기 전에 시스템 시계를 변경하여 다시 작성중인 문서의 작성 날짜를 변경할 수 있습니다. 이 단계를 권장하지 않습니다.

관련 문제