Ich verschiebe meine Notizen zu Evernote. Dazu muss ich .doc/.docx-Dateien in RTF konvertieren. Der Grund dafür ist, dass ich ein Skript zum Importieren von RTF in Evernote habe. Einige meiner .doc/.docx-Dateien enthalten jedoch Bilder.
Gibt es eine Möglichkeit, herauszufinden, welche .doc/.docx-Dateien Bilder enthalten, ohne sie alle anzuzeigen? Ich habe Tausende. Auf diese Weise kann ich einfach die wenigen öffnen, die Bilder enthalten, und den gesamten Inhalt direkt in Evernote kopieren/einfügen.
Sollte sagen, dass ich OS X 10.6.8 verwende.
Antwort1
Wo speichern .doc-Dateien Bilder?
Word- doc
Dateien werden eigentlich komprimiert und dann in ein Containerformat gepackt. Sie speichern Medien irgendwo in diesem kompilierten Dateiformat, wahrscheinlich direkt nach dem doc
Header des Formats. Nach den Bilddaten folgt dann Ihr eigentliches Dokument als Zip-kompatibler Ordner.
Wenn Sie also versuchen, eine doc
Datei zu entpacken, erhalten Sie am Anfang eine überschüssige Anzahl von Bytes. Dies sind Ihre Bilder (plus der Formatheader). Sie können nun versuchen, unzip
die Datei zu öffnen und die überschüssige Anzahl von Bytes zu überprüfen.
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
Beim Testen habe ich festgestellt, dass der Header von „Klartext“-Word-Dokumenten 6060 Byte groß ist (einige sind allerdings etwas größer). Wir können versuchen, dies auszunutzen, um festzustellen, ob sich in einem Dokument ein Bild befindet. Sagen wir einfach 8000 Byte – da echte Bilder definitiv mehr als ein paar KB groß sein werden.
Was ist mit .docx-Dateien?
Mit dem Office 2007-Format ( docx
) ist dies viel einfacher. Dies sind tatsächlich komprimierte Dateien, und jede Word-Datei, die eingebettete Medien jeglicher Art (Bilder, Videos) enthält, enthält das file.docx/word/media
Verzeichnis. Wir müssen also nur die docx
Dateien entpacken und prüfen, ob dieses Verzeichnis vorhanden ist.
Ein Skript zum Suchen nach Bildern
Erstellen Sie eine neue leere Datei, nennen Sie sie
docx-images.rb
und fügen Sie den folgenden Inhalt ein:#!/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
Speichern Sie es irgendwo, vorzugsweise in einem Ordner, von dem aus Sie mit der Suche nach Dateien beginnen möchten
docx
, vielleicht IhremDocuments
Ordner.Jetzt öffneTerminal.app, und verwenden Sie ,
cd ~/Documents
um dorthin zu gelangen.Geben Sie ein
ruby docx-images.rb
, und IhrDocuments
Ordner wird rekursiv nach -docx
unddoc
-Dateien durchsucht. Erstere werden nach entpackt/tmp/word
und es wird geprüft, ob sie eingebettete Medien enthalten. Letztere werden einfach nach entpackt/dev/null
und hinterlassen somit keine Spuren.Sie erhalten am Ende eine Liste mit den Geräten mit eingebetteten Medien.
Nachweisen
Um zu beweisen, dass das funktioniert, habe ich vier Dateien erstellt. Eine mit Bildern, eine ohne Bilder – jeweils als doc
und docx
:
Führen Sie dann das Skript aus:
charon:test werner$ ruby docx-images.rb
images.docx
images.doc
Natürlich könnte das Skript verbessert werden, um nach tatsächlichen Bildern in diesem media
Ordner zu suchen, aber es ist unwahrscheinlich, dass es existiert, es sei denn, die Datei enthält wirklich Medien. Dasselbe gilt für die „6060“-Byte-Prüfung. Es ist ein Hack, aber bei mir funktioniert es.
Natürlich ist das Skript von der Implementierung unzip
auf dem jeweiligen System abhängig, für die OS X-Version funktioniert es aber.
Antwort2
FürWindows:
- Benennen Sie die DOCX-Datei in eine ZIP-Datei um, öffnen Sie die ZIP-Datei und extrahieren Sie die Bilder (der beste Weg!).
- Suchen Sie dann unter dem Bild
\zipfile\word\media
nach dem Bild.