Folder with docx files

Nedávno jsem byl požádán o radu, která se vztahovala k příliš velkému docx souboru. Soubor měl přes 22 MB a to už se může projevit na neochotě některých emailových serverů takový soubor přijmout. Samozřejmě, že existuje možnost takový soubor nahrát někam do cloudového úložiště, ale co když je dokument citlivý nebo o takové možnosti nevíme (a žijeme třeba na Marsu)?

V tomto případě se jednalo o seminární práci se spoustou obrázků, tudíž jsem usoudil, že na vině budou ony. V prvním kroku jsem soubor rozbalil pomocí unzip -d dokument dokument.docx do složky dokument.

Obrázky se v rozbaleném souboru nacházejí ve složce /word/media/ a tak jsem se pomocí příkazu cd dokument/word/media do této složky přepnul. K mému překvapení byly všechny obrázky ve formátu png. Jelikož se jednalo převážně o screenshoty, byl tento formát podle mého názoru zvolen nevhodně.

Pomocí příkazu ze sbírky imagemagick, mogrify -format jpg *.png jsem vše převedl na formát jpg a odstranil původní png soubory. Velikost všech obrázků se dostala na třetinu a já byl spokojen.

Kdybych teď však zkusil soubor opět zkompletovat, narazil bych na chybu chybných referencí, protože jsem fakticky soubory přejmenoval a v dokumentu by se tudíž nezobrazily. Tento problém lze ale opět vyřešit velmi jednoduše. Stačí se navigovat do složky /word/_rels a v ní v souboru document.xml.rels změnit všechny výskyty řetězce png na jpg příkazem sed -i.bak s/png/jpg/g document.xml.rels, který zároveň vytvoří zálohu pro případ, že by se něco nepovedlo.

Posledním krokem byla tedy kompletace souboru zpět. K tomu stačilo přejít do složky dokument a spustit zip -r ../smaller_dokument.docx, vedle původního dokumentu se pak vytvořil nový, s téměr třetinovou velikostí. Ještě před kompletací můžete chtít odstranit vytvořené zálohy ;).