Identificando arquivos .doc / .docx que contêm imagens

7

Estou movendo minhas anotações para o evernote. Para isso, preciso converter arquivos .doc / .docx em rtf. A razão para isso é que eu tenho um script para importar o rtf para o evernote. No entanto, alguns dos meus arquivos .doc / .docx contêm imagens.

Existe alguma maneira de identificar quais arquivos .doc / .docx contêm imagens sem visualizá-los todos? Eu tenho milhares. Dessa forma, posso simplesmente abrir os poucos que possuem imagens e copiar / colar todo o conteúdo direto no evernote.

Devo dizer que estou usando o OS X 10.6.8.

    
por rev 15.04.2012 / 11:51

2 respostas

11

Onde os arquivos .doc armazenam imagens?

Os arquivos do Word doc são realmente compactados e, em seguida, colocados em um formato de contêiner. Eles armazenam mídia em algum lugar nesse formato de arquivo compilado, provavelmente logo após o cabeçalho do formato doc . Após os dados da imagem, há o seu documento real como uma pasta compatível com zip.

Então,quandovocêtentadescompactarumarquivodoc,vocêobtémumnúmeroexcessivodebytesnocomeço.Estassãosuasimagens(maisocabeçalhodoformato).Agoravocêpodetentarunzipdoarquivoeverificaroexcessodebytes.

charon:testwerner$unzip-cimages.doc>/dev/nullwarning[images.doc]:47166extrabytesatbeginningorwithinzipfilecharon:testwerner$unzip-cnoimages.doc>/dev/nullwarning[noimages2.doc]:6060extrabytesatbeginningorwithinzipfile

Pormeiodetestes,descobriqueocabeçalhodedocumentosdoWord"de texto simples" tem 6060 bytes de tamanho (alguns são um pouco maiores). Podemos tentar explorá-lo para determinar se há uma imagem dentro de um documento. Vamos apenas dizer 8000 bytes - já que as imagens reais terão definitivamente mais do que alguns KB.

E os arquivos .docx?

Com o formato do Office 2007 ( docx ), isso é muito mais fácil. Esses são arquivos compactados reais e qualquer arquivo do Word que contenha mídia incorporada de qualquer tipo (imagens, vídeo) incluirá o diretório file.docx/word/media . Portanto, precisamos apenas descompactar os arquivos docx e verificar se esse diretório existe.

Um script para verificar imagens

  • Crie um novo arquivo vazio, chame-o docx-images.rb e cole o seguinte conteúdo:

    #!/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
    
  • Salve-o em algum lugar, de preferência em uma pasta na qual deseja iniciar sua pesquisa de docx , talvez da pasta Documents .

  • Agora, abra Terminal.app e use cd ~/Documents para ir até lá.

  • Digite ruby docx-images.rb e ele examinará recursivamente sua pasta Documents dos arquivos docx e doc . Ele descompactará o primeiro para /tmp/word e verificará se eles contêm mídia incorporada. Os últimos são descompactados para /dev/null , não deixando rastros.

  • Você terminará com uma lista daqueles com mídia incorporada.

Prova

Para provar que isso funciona, criei quatro arquivos. Um com imagens, uma sem imagens - ambas como doc e docx :

Emseguida,executandooscript:

charon:testwerner$rubydocx-images.rbimages.docximages.doc

Oscriptpodesermelhoradoparaverificarseháimagensreaisnapastamedia,maséimprovávelqueexista,amenosqueoarquivorealmentecontenhaqualquermídia.Omesmovaleparaaverificaçãodebytes"6060". É um hack, mas funciona para mim.

É claro que o script depende da implementação de unzip no respectivo sistema, mas funciona para a versão do OS X.

    
por 15.04.2012 / 14:09
0

Para o Windows :

  • Renomeando o .docx para .zip, abrindo o arquivo zip e extraindo as imagens (Melhor maneira!).
  • Em seguida, procure a imagem em \zipfile\word\media da imagem.

Referência

    
por 02.02.2017 / 07:04