Decrease file size below 400kb and allow download
~/
~/attachments/ddd0e355-94c5-415f-be0b-cac6df01cff0
PDF compression best practices reduce scan size image recompression
mkdir -p "/tmp/workspace/marksheet-compression/output" python - <<'PY' import os from pypdf import PdfReader path='/tmp/workspace/attachments/ddd0e355-94c5-415f-be0b-cac6df01cff0/12 HSC marksheet.pdf' r=PdfReader(path) print('bytes',os.path.getsize(path),'pages',len(r.pages)) for i,p in enumerate(r.pages): print(i+1,float(p.mediabox.width),float(p.mediabox.height),len(p.extract_text() or '')) try: import fitz print('pymupdf',fitz.version) except Exception as e: print('NOFITZ',e) PY
python - <<'PY' import os from pypdf import PdfReader path='/tmp/workspace/attachments/ddd0e355-94c5-415f-be0b-cac6df01cff0/12 HSC marksheet.pdf' r=PdfReader(path) print('bytes',os.path.getsize(path),'pages',len(r.pages)) for i,p in enumerate(r.pages): print(i+1,float(p.mediabox.width),float(p.mediabox.height),len(p.extract_text() or '')) try: import fitz print('pymupdf',fitz.version) except Exception as e: print('NOFITZ',e) PY
python - <<'PY' from pypdf import PdfReader import os p='/tmp/workspace/attachments/ddd0e355-94c5-415f-be0b-cac6df01cff0/12 HSC marksheet.pdf' r=PdfReader(p); page=r.pages[0] print('image count',len(list(page.images))) for im in page.images: print(im.name,im.image.size,im.image.mode, len(im.data),im.image.format) PY
python - <<'PY' import os from PIL import Image from pypdf import PdfReader, PdfWriter source='/tmp/workspace/attachments/ddd0e355-94c5-415f-be0b-cac6df01cff0/12 HSC marksheet.pdf' outdir='/tmp/workspace/marksheet-compression/output' os.makedirs(outdir,exist_ok=True) reader=PdfReader(source) for q in (55,45,35): r=PdfReader(source) for page in r.pages: for im in page.images: im.replace(im.image, quality=q, optimize=True, progressive=True) writer=PdfWriter() for p in r.pages: writer.add_page(p) writer.add_metadata({}) dest=f'{outdir}/marksheet_under_400kb_q{q}.pdf' with open(dest,'wb') as f: writer.write(f) print(q,os.path.getsize(dest)) PY
python - <<'PY' import os from io import BytesIO from PIL import Image from pypdf import PdfReader from reportlab.pdfgen import canvas source='/tmp/workspace/attachments/ddd0e355-94c5-415f-be0b-cac6df01cff0/12 HSC marksheet.pdf' outdir='/tmp/workspace/marksheet-compression/output' os.makedirs(outdir,exist_ok=True) reader=PdfReader(source) page=reader.pages[0] image=next(iter(page.images)).image w,h=map(float,(page.mediabox.width,page.mediabox.height)) for q in (60,50,40,35,30): img=image.copy().convert('RGB') buf=BytesIO(); img.save(buf,format='JPEG',quality=q,optimize=True,progressive=True) jpg=buf.getvalue() jp=f'{outdir}/temp_q{q}.jpg' open(jp,'wb').write(jpg) dest=f'{outdir}/12_HSC_marksheet_under_400KB.pdf' c=canvas.Canvas(dest,pagesize=(w,h),pageCompression=1) c.drawImage(jp,0,0,width=w,height=h,mask='auto') c.showPage(); c.save() sz=os.path.getsize(dest) print(q,len(jpg),sz) if sz<400*1024: break # clean intermediates for f in os.listdir(outdir): if f.startswith('temp_') or f.startswith('marksheet_under_'): os.remove(os.path.join(outdir,f)) print('FINAL',dest,os.path.getsize(dest)) PY python - <<'PY' import os from pypdf import PdfReader path='/tmp/workspace/marksheet-compression/output/12_HSC_marksheet_under_400KB.pdf' r=PdfReader(path) print('verified:',os.path.getsize(path),'bytes;',len(r.pages),'page(s); text_chars=',len(r.pages[0].extract_text() or '')) PY
python - <<'PY' import os from io import BytesIO from pypdf import PdfReader from reportlab.pdfgen import canvas source='/tmp/workspace/attachments/ddd0e355-94c5-415f-be0b-cac6df01cff0/12 HSC marksheet.pdf' outdir='/tmp/workspace/marksheet-compression/output' reader=PdfReader(source); page=reader.pages[0] image=next(iter(page.images)).image.convert('RGB') w,h=map(float,(page.mediabox.width,page.mediabox.height)) for q in (25,20,18,15,12): jpg_path=f'{outdir}/candidate_q{q}.jpg' image.save(jpg_path,format='JPEG',quality=q,optimize=True,progressive=True) dest=f'{outdir}/candidate_q{q}.pdf' c=canvas.Canvas(dest,pagesize=(w,h),pageCompression=1) c.drawImage(jpg_path,0,0,width=w,height=h,mask='auto') c.showPage();c.save() print(q,os.path.getsize(jpg_path),os.path.getsize(dest)) PY
python - <<'PY' import os, shutil from pypdf import PdfReader outdir='/tmp/workspace/marksheet-compression/output' source=f'{outdir}/candidate_q20.pdf' final=f'{outdir}/12_HSC_marksheet_under_400KB.pdf' shutil.copy2(source,final) reader=PdfReader(final) size=os.path.getsize(final) assert size < 400*1024, (size,400*1024) assert len(reader.pages)==1 for name in os.listdir(outdir): if name != os.path.basename(final): os.remove(os.path.join(outdir,name)) print(f'Final file: {final}\nSize: {size} bytes ({size/1024:.1f} KB)\nPages: {len(reader.pages)}') PY
12 HSC marksheet under 400KB
PDF Document · PDF