Is there a (Linux) command-line tool to extract all the images from a MS Word document, (preferably one that could handle the .docx format)?
3 Answers
Since docx files are zip files you can unzip the docx file and then pick out the image files.
I have no Microsoft Office to test so I downloaded some random docx files from the internet. It seems that the images are always stored in a word/media
directory in the archive.
This command will extract all files from the media
directory from the archive:
unzip foo.docx "word/media/*"
This command will extract only *.jpeg
files:
unzip foo.docx "*.jpeg"
Note that you have to specify "*.jpg"
if the files are saved as jpg
instead of jpeg
. I assume that it is also possible that images are stored using a different format. I have no idea whether images can be stored in another location other than the word/media
directory. You can use unzip -l
to list the contents of the archive.
-
Well thats useful! Do you know if this holds for the older .doc formats?– HookedMay 23, 2011 at 21:31
-
4
I wrote an open source Python program called ofc_media that basically does the unzipping mentioned in lesmana's answer, but automates the search process a bit. It also works on OpenDocument format documents, can limit the extraction to certain file extensions, etc.
Saving a Word document as a web page is a technique used on Windows to extract all the images into a folder: http://support.microsoft.com/kb/555171
It might be long winded, but perhaps you could control Open Office on Linux from the command line to extract the images, possibly by converting to a web page and ending up with the images in the supporting folder it would create.
-
1I found this problematic. Some of my images became EMZ files - compressed EMF I believe. Noting on my Windows 10 system could open the EMZs (did not try it on my Linux box). However, renaming the *.docx to *.zip and opening it provided access to the EMF files which I could then readily use. Jun 27, 2018 at 22:00