Оставьте это здесь на тот случай, если кто-то еще будет искать что-то похожее: в конце концов, я решил выбрать Ghostscript. Из-за дополнительного шага это не совсем то, что я искал, но, по крайней мере, его можно автоматизировать:
import subprocess
def gs_opt(filename):
filenameTmp = filename.split('.')[-2]+'_tmp.pdf'
gs = ['gswin64',
'-sDEVICE=pdfwrite',
'-dEmbedAllFonts=false',
'-dSubsetFonts=true', # Create font subsets (default)
'-dPDFSETTINGS=/prepress', # Image resolution
'-dDetectDuplicateImages=true', # Embeds images used multiple times only once
'-dCompressFonts=true', # Compress fonts in the output (default)
'-dNOPAUSE', # No pause after each image
'-dQUIET', # Suppress output
'-dBATCH', # Automatically exit
'-sOutputFile='+filenameTmp, # Save to temporary output
filename] # Input file
subprocess.run(gs) # Create temporary file
subprocess.run(['del', filename],shell=True) # Delete input file
subprocess.run(['ren',filenameTmp,filename],shell=True) # Rename temporary to input file
И затем вызвать
filename = 'test.pdf'
plt.savefig(filename)
gs_opt(filename)
Это сохранит фигуру как test.pdf, используйте Ghostscript для создания временного оптимизированного test_tmp.pdf, удалите исходный файл и переименуйте оптимизированный файл в test.pdf.
По сравнению с экспортом файла с помощью векторного графического редактора, полученный PDF созданный Ghostscript все еще в несколько раз больше (обычно в 4-5 раз). Однако - это , уменьшающий размер файла до 1/5 - 1/10 от исходного файла. Это что-то.