이미지가 포함된 .doc/.docx 파일 식별

이미지가 포함된 .doc/.docx 파일 식별

내 노트를 Evernote로 옮기고 있어요. 이를 위해서는 .doc/.docx 파일을 rtf로 변환해야 합니다. 그 이유는 rtf를 Evernote로 가져오는 스크립트가 있기 때문입니다. 그러나 내 .doc/.docx 파일 중 일부에는 이미지가 포함되어 있습니다.

이미지를 모두 보지 않고도 어떤 .doc/.docx 파일에 이미지가 포함되어 있는지 확인할 수 있는 방법이 있나요? 나는 수천을 가지고 있습니다. 이렇게 하면 이미지가 있는 몇 개만 열고 전체 콘텐츠를 Evernote에 바로 복사/붙여넣을 수 있습니다.

OS X 10.6.8을 사용하고 있다고 해야 할까요?

답변1

.doc 파일은 어디에 이미지를 저장하나요?

Word doc파일은 실제로 압축된 다음 컨테이너 형식으로 저장됩니다. 그들은 이 컴파일된 파일 형식의 어딘가, 아마도 doc형식의 헤더 바로 뒤에 미디어를 저장합니다 . 이미지 데이터 뒤에는 zip 호환 폴더로 실제 문서가 있습니다.

파일 레이아웃

따라서 파일의 압축을 풀려고 하면 doc처음에 바이트 수가 초과됩니다. 이는 이미지(및 형식 헤더)입니다. 이제 unzip파일을 시도하여 초과 바이트 양을 확인할 수 있습니다.

charon:test werner$ unzip -c images.doc > /dev/null
warning [images.doc]:  47166 extra bytes at beginning or within zipfile

charon:test werner$ unzip -c noimages.doc > /dev/null
warning [noimages2.doc]:  6060 extra bytes at beginning or within zipfile

테스트를 통해 "일반 텍스트" Word 문서의 헤더 크기가 6060바이트인 것을 발견했습니다(일부는 약간 더 큼). 문서 내부에 이미지가 있는지 확인하기 위해 이를 활용해 볼 수 있습니다. 8000바이트라고 가정해 보겠습니다. 실제 이미지는 확실히 몇 KB 이상을 가지기 때문입니다.


.docx 파일은 어떻습니까?

Office 2007 형식( docx)을 사용하면 훨씬 더 쉽습니다. 이는 실제 압축 파일이며 모든 종류의 내장 미디어(이미지, 비디오)가 포함된 모든 Word 파일에는 디렉터리 가 포함됩니다 file.docx/word/media. 따라서 파일의 압축을 풀고 docx해당 디렉터리가 있는지 확인하면 됩니다.


이미지를 확인하는 스크립트

  • 새로운 빈 파일을 만들고 이름을 지정 docx-images.rb하고 다음 내용을 붙여넣습니다.

    #!/usr/bin/env ruby
    require 'open3'
    TEMPDIR = "/tmp/word/"
    
    # check for docx files
    Dir.glob("**/*.docx").each do |file|
      system("rm -rf '#{TEMPDIR}'")
      system("unzip '#{file}' -d #{TEMPDIR} > /dev/null")
      if File.directory?("#{TEMPDIR}/word/media/")
        puts file
      end
    end
    
    # check for doc files
    Dir.glob("**/*.doc").each do |file|
      stdin, stdout, stderr = Open3.popen3("unzip -c '#{file}' > /dev/null")
      info = stderr.readlines[0]
      info = info.gsub(" extra bytes at beginning or within zipfile", "").gsub(/warning\s\[.*\]:\s+/, "")
      if info.to_i > 8000 # assume a little more than usual header size
        puts file
      end
    end
    
  • 파일 검색을 시작하려는 폴더( docx예: Documents폴더)에 저장하는 것이 좋습니다.

  • 이제 열어보세요Terminal.app, 그리고 cd ~/Documents그곳으로 가는 데 사용합니다.

  • 를 입력 하면 폴더 와 파일을 ruby docx-images.rb반복적으로 검색합니다 . 전자의 압축을 에 풀고 내장된 미디어가 포함되어 있는지 확인합니다. 후자는 에 압축이 풀려 흔적이 남지 않습니다.Documentsdocxdoc/tmp/word/dev/null

  • 내장된 미디어가 있는 목록이 표시됩니다.


증거

이것이 작동한다는 것을 증명하기 위해 네 개의 파일을 만들었습니다. 하나는 이미지가 있고 하나는 이미지가 없습니다 – as docdocx:

증거

그런 다음 스크립트를 실행합니다.

charon:test werner$ ruby docx-images.rb 
images.docx
images.doc

분명히 해당 폴더의 실제 이미지를 확인하도록 스크립트를 개선할 수 있지만 media파일에 실제로 미디어가 포함되어 있지 않으면 존재하지 않을 가능성이 높습니다. "6060" 바이트 검사도 마찬가지입니다. 해킹이지만 나에게는 효과가 있습니다.

물론 스크립트는 unzip해당 시스템의 구현에 따라 다르지만 OS X 버전에서는 작동합니다.

답변2

을 위한윈도우:

  • .docx의 이름을 .zip으로 바꾸고 zip 파일을 열고 이미지를 추출합니다(가장 좋은 방법!).
  • 그런 다음 이미지 아래에서 이미지를 찾으십시오 \zipfile\word\media.

참조

관련 정보