Отрезать с помощью Python метаданные картинок в свёрстанном PDF

Прислали несколько PDF дикого размера, при этом при выписке в InDesign настройки сжатия стояли обычные. Стал разбираться - изменение настроек практически не влияет на размер файла, так и остаётся ~100mb.

Посмотрел внутрь файла и обнаружил кучу текстовой информации, оказалось что это  photoshop document ancestors и они совсем не нужны, а InDesign при выписке их просто копирует один в один.

Выглядят они так:

609 0 obj <</Length 5276838/Subtype/XML/Type/Metadata>>stream

и потом много подобных строк:

<rdf:li>00178AD05005B79BDF94C8572B120B2D</rdf:li>

Если в теле то так:

 

Для удаления этой информации я написал скрипт на Python,  на PDF работает отлично, некоторые PDF сжимались с 180 до 4 мегабайт, а некоторые практически никак - в их картинках нет метаданных.

Вот код:

import re
import sys
droppedFile = sys.argv[1]
out=droppedFile.split('.')[0]+"-new."+droppedFile.split('.')[1]

file=droppedFile
with open(file,mode='rb') as file:
filecontent = file.read()

print(len(filecontent))
content_new = re.sub(b'\d+\s0\sobj.<</Length\s\d+/Subtype/XML/Type/Metadata.*?endobj', b'', filecontent, flags = re.M|re.S )

print (len(content_new))

output_file = open(out,"wb")
output_file.write(content_new)
output_file.close()

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *