Estoy moviendo mis notas a evernote. Para ello necesito convertir archivos .doc/.docx a rtf. La razón de esto es que tengo un script para importar rtf a evernote. Sin embargo, algunos de mis archivos .doc/.docx contienen imágenes.
¿Hay alguna forma de identificar qué archivos .doc/.docx contienen imágenes sin verlos todos? Tengo miles. De esta manera puedo simplemente abrir las pocas que tienen imágenes y copiar/pegar todo el contenido directamente en Evernote.
Debería decir que estoy usando OS X 10.6.8.
Respuesta1
¿Dónde almacenan las imágenes los archivos .doc?
En realidad, los archivos de Word doc
se comprimen y luego se colocan en un formato contenedor. Almacenan medios en algún lugar de este formato de archivo compilado, probablemente justo después del doc
encabezado del formato. Después de los datos de la imagen, está su documento real como una carpeta compatible con zip.
Entonces, cuando intentas descomprimir un doc
archivo, obtienes un número excesivo de bytes al principio. Estas son tus imágenes (más el encabezado de formato). Ahora puede intentar abrir unzip
el archivo y verificar la cantidad sobrante de bytes.
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
A través de las pruebas, encontré que el encabezado de los documentos de Word de "texto sin formato" tiene un tamaño de 6060 bytes (aunque algunos son un poco más grandes). Podemos intentar explotarlo para determinar si hay una imagen dentro de un documento. Digamos simplemente 8000 bytes, ya que las imágenes reales definitivamente tendrán más de unos pocos KB.
¿Qué pasa con los archivos .docx?
Con el formato de Office 2007 ( docx
), esto es mucho más sencillo. Estos son archivos comprimidos reales y cualquier archivo de Word que contenga medios incrustados de cualquier tipo (imágenes, videos) incluirá el file.docx/word/media
directorio. Entonces, solo necesitamos descomprimir los docx
archivos y verificar si ese directorio existe.
Un script para buscar imágenes.
Cree un nuevo archivo vacío, llámelo
docx-images.rb
y pegue el siguiente contenido:#!/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
Guárdelo en algún lugar, preferiblemente en una carpeta desde donde desee comenzar la búsqueda de
docx
archivos, tal vez suDocuments
carpeta.Ahora, abreTerminal.aplicación, y solía
cd ~/Documents
ir allí.Escriba
ruby docx-images.rb
y escaneará recursivamente suDocuments
carpeta en busca de archivosdocx
ydoc
. Descomprimirá el primero/tmp/word
y comprobará si contienen medios incrustados. Estos últimos simplemente se descomprimen para/dev/null
no dejar rastros.Terminarás con una lista de aquellos con medios integrados.
Prueba
Para demostrar que esto funciona, creé cuatro archivos. Uno con imágenes, otro sin imágenes, tanto como doc
como docx
:
Luego, ejecutando el script:
charon:test werner$ ruby docx-images.rb
images.docx
images.doc
Claramente, el script podría mejorarse para buscar imágenes reales en esa media
carpeta, pero es poco probable que exista a menos que el archivo realmente contenga algún medio. Lo mismo ocurre con la comprobación de "6060" bytes. Es un truco, pero funciona para mí.
Por supuesto, el script depende de la implementación unzip
en el sistema respectivo, pero funciona para la versión OS X.
Respuesta2
Paraventanas:
- Cambiar el nombre del .docx a .zip, abrir el archivo zip y extraer las imágenes (¡la mejor manera!).
- Luego busque la imagen a continuación
\zipfile\word\media
para ver la imagen.