documentation/user-guide/pdf_optimise.py

60 lines
1.7 KiB
Python
Executable File

#!/usr/bin/env python
import os
import sys
from tempfile import mkdtemp
import re
import shutil
IMAGE_WIDTH = re.compile(r':width: ([\d]+)px', re.UNICODE)
def copy_files(source_dir, temp_dir):
for root, dirs, files in os.walk(source_dir):
curr_dir = root[len(source_dir) + 1:]
full_dir = os.path.join(temp_dir, curr_dir)
for name in files:
if name.endswith(u'.rst'):
if not os.path.exists(full_dir):
os.makedirs(full_dir)
shutil.copy2(os.path.join(root, name),
os.path.join(full_dir, name))
def restore_files(temp_dir, restore_dir):
copy_files(temp_dir, restore_dir)
shutil.rmtree(temp_dir)
def adjust_image(match):
try:
width = int(match.group(1))
width = int(round(width * 2.4))
return ':width: %spx' % width
except:
return match.group(0)
def process_images(filename):
fd = open(filename, 'rb')
contents = fd.read()
fd.close()
contents = IMAGE_WIDTH.sub(adjust_image, contents)
fd = open(filename, 'wb')
fd.write(contents)
fd.close()
def process_files(base_dir):
for root, dirs, files in os.walk(base_dir):
for name in files:
if name.endswith(u'.rst'):
process_images(os.path.join(root, name))
def main():
here = os.path.abspath(os.path.split(__file__)[0])
if len(sys.argv) > 1 and sys.argv[1] == 'restore':
temp_dir = os.path.abspath(sys.argv[2])
restore_files(temp_dir, here)
else:
temp_dir = mkdtemp()
print temp_dir
copy_files(here, temp_dir)
process_files(here)
if __name__ == '__main__':
main()