Morify this into a pdf that is readable without changing any content
cd /tmp/workspace/attachments/13b8af4f-3f22-4357-a012-90ae39c65d66/ && python3 -c " import pdfplumber with pdfplumber.open('MD_Anaesthesiology_Liver_Topics_Notes.pdf') as pdf: print(f'Total pages: {len(pdf.pages)}') # Check first few pages for i, page in enumerate(pdf.pages[:3]): print(f'--- Page {i+1} ---') text = page.extract_text() if text: print(text[:500]) else: print('[No text extracted]') print() "
python3 -c " import pdfplumber from pypdf import PdfReader path = '/tmp/workspace/attachments/13b8af4f-3f22-4357-a012-90ae39c65d66/MD_Anaesthesiology_Liver_Topics_Notes.pdf' reader = PdfReader(path) print(f'Pages: {len(reader.pages)}') print(f'Metadata: {reader.metadata}') # Check page sizes and if there are images with pdfplumber.open(path) as pdf: for i, page in enumerate(pdf.pages): print(f'Page {i+1}: size={page.width}x{page.height}, images={len(page.images)}, chars={len(page.chars)}') "
mkdir -p /tmp/workspace/liver-notes/images && python3 -c " import pdfplumber from pypdf import PdfReader import base64, os path = '/tmp/workspace/attachments/13b8af4f-3f22-4357-a012-90ae39c65d66/MD_Anaesthesiology_Liver_Topics_Notes.pdf' reader = PdfReader(path) for i, page in enumerate(reader.pages): for j, img in enumerate(page.images): img_data = img.data ext = img.image_format.lower() if img.image_format else 'png' if ext == 'jpeg': ext = 'jpg' out_path = f'/tmp/workspace/liver-notes/images/page_{i+1}_img_{j+1}.{ext}' with open(out_path, 'wb') as f: f.write(img_data) print(f'Saved: {out_path} ({len(img_data)} bytes, format={img.image_format})') "
python3 -c " from pypdf import PdfReader path = '/tmp/workspace/attachments/13b8af4f-3f22-4357-a012-90ae39c65d66/MD_Anaesthesiology_Liver_Topics_Notes.pdf' reader = PdfReader(path) page = reader.pages[0] img = page.images[0] print(dir(img)) print(type(img)) "
python3 -c " from pypdf import PdfReader from PIL import Image import io, os path = '/tmp/workspace/attachments/13b8af4f-3f22-4357-a012-90ae39c65d66/MD_Anaesthesiology_Liver_Topics_Notes.pdf' os.makedirs('/tmp/workspace/liver-notes/images', exist_ok=True) reader = PdfReader(path) for i, page in enumerate(reader.pages): for j, img in enumerate(page.images): # img.image is a PIL Image object pil_img = img.image out_path = f'/tmp/workspace/liver-notes/images/page_{i+1}.png' pil_img.save(out_path) print(f'Saved page {i+1}: {pil_img.size}, mode={pil_img.mode}') "
python3 -c "import pytesseract; print('pytesseract ok')" 2>&1; python3 -c "import easyocr; print('easyocr ok')" 2>&1; python3 -c "import paddleocr; print('paddleocr ok')" 2>&1
which tesseract 2>&1; tesseract --version 2>&1 | head -3
python3 -c " from PIL import Image import os img_dir = '/tmp/workspace/liver-notes/images' for fname in sorted(os.listdir(img_dir)): img = Image.open(os.path.join(img_dir, fname)) print(f'{fname}: {img.size[0]}x{img.size[1]}, mode={img.mode}') "
python3 << 'EOF' import os from PIL import Image from reportlab.lib.pagesizes import A4, landscape from reportlab.platypus import SimpleDocTemplate, Image as RLImage, Spacer from reportlab.lib.units import mm, inch from reportlab.lib import colors from pypdf import PdfWriter, PdfReader from reportlab.pdfgen import canvas import io img_dir = '/tmp/workspace/liver-notes/images' output_path = '/tmp/workspace/liver-notes/Liver_Topics_Notes_Readable.pdf' # Page margin MARGIN = 10 * mm # Build PDF page by page from reportlab.pdfgen import canvas as rl_canvas from reportlab.lib.pagesizes import A4, landscape as rl_landscape # Create a single PDF with all pages # For each image, detect orientation and set page size accordingly image_files = sorted([f for f in os.listdir(img_dir) if f.endswith('.png')]) # We'll write each page separately and merge writer = PdfWriter() page_pdfs = [] for fname in image_files: img_path = os.path.join(img_dir, fname) pil_img = Image.open(img_path) iw, ih = pil_img.size # Determine page orientation if iw > ih: # landscape page_w, page_h = rl_landscape(A4) else: # portrait page_w, page_h = A4 # Available area avail_w = page_w - 2 * MARGIN avail_h = page_h - 2 * MARGIN # Scale image to fit available area, preserving aspect ratio scale = min(avail_w / iw, avail_h / ih) draw_w = iw * scale draw_h = ih * scale # Center the image x = (page_w - draw_w) / 2 y = (page_h - draw_h) / 2 buf = io.BytesIO() c = rl_canvas.Canvas(buf, pagesize=(page_w, page_h)) # White background c.setFillColor(colors.white) c.rect(0, 0, page_w, page_h, fill=1, stroke=0) # Draw image c.drawImage(img_path, x, y, width=draw_w, height=draw_h, preserveAspectRatio=True) c.save() buf.seek(0) reader = PdfReader(buf) writer.add_page(reader.pages[0]) print(f' {fname}: page {page_w:.0f}x{page_h:.0f}, img at {draw_w:.0f}x{draw_h:.0f}') with open(output_path, 'wb') as f: writer.write(f) print(f'\nSaved: {output_path}') size_kb = os.path.getsize(output_path) / 1024 print(f'File size: {size_kb:.1f} KB') EOF
python3 -c " from pypdf import PdfReader import os path = '/tmp/workspace/liver-notes/Liver_Topics_Notes_Readable.pdf' reader = PdfReader(path) print(f'Pages: {len(reader.pages)}') for i, page in enumerate(reader.pages): print(f' Page {i+1}: {page.mediabox.width:.1f} x {page.mediabox.height:.1f} pts') orig = '/tmp/workspace/attachments/13b8af4f-3f22-4357-a012-90ae39c65d66/MD_Anaesthesiology_Liver_Topics_Notes.pdf' orig_size = os.path.getsize(orig)/1024 new_size = os.path.getsize(path)/1024 print(f'\nOriginal: {orig_size:.1f} KB') print(f'New: {new_size:.1f} KB') "
python3 << 'EOF' import os, io from PIL import Image from reportlab.pdfgen import canvas as rl_canvas from reportlab.lib.pagesizes import A4, landscape as rl_landscape from reportlab.lib import colors from reportlab.lib.units import mm from pypdf import PdfWriter, PdfReader img_dir = '/tmp/workspace/liver-notes/images' output_path = '/tmp/workspace/liver-notes/Liver_Topics_Notes_Readable.pdf' MARGIN = 10 * mm image_files = sorted([f for f in os.listdir(img_dir) if f.endswith('.png')]) writer = PdfWriter() for fname in image_files: img_path = os.path.join(img_dir, fname) pil_img = Image.open(img_path) iw, ih = pil_img.size # Determine page orientation if iw > ih: page_w, page_h = rl_landscape(A4) else: page_w, page_h = A4 avail_w = page_w - 2 * MARGIN avail_h = page_h - 2 * MARGIN scale = min(avail_w / iw, avail_h / ih) draw_w = iw * scale draw_h = ih * scale x = (page_w - draw_w) / 2 y = (page_h - draw_h) / 2 # Save as JPEG in temp buffer for smaller size jpg_buf = io.BytesIO() rgb_img = pil_img.convert('RGB') rgb_img.save(jpg_buf, format='JPEG', quality=90, optimize=True) jpg_buf.seek(0) # Save JPEG to temp file (reportlab needs a file path or ImageReader) tmp_jpg = f'/tmp/workspace/liver-notes/images/tmp_{fname}.jpg' with open(tmp_jpg, 'wb') as f: f.write(jpg_buf.read()) buf = io.BytesIO() c = rl_canvas.Canvas(buf, pagesize=(page_w, page_h)) c.setFillColor(colors.white) c.rect(0, 0, page_w, page_h, fill=1, stroke=0) c.drawImage(tmp_jpg, x, y, width=draw_w, height=draw_h, preserveAspectRatio=True) c.save() os.remove(tmp_jpg) buf.seek(0) reader = PdfReader(buf) writer.add_page(reader.pages[0]) print(f' {fname}: {iw}x{ih} -> page {"landscape" if iw>ih else "portrait"}') with open(output_path, 'wb') as f: writer.write(f) size_kb = os.path.getsize(output_path) / 1024 print(f'\nSaved: {output_path} ({size_kb:.1f} KB)') EOF
Liver Topics Notes Readable
PDF Document · PDF
Make it in book style not merge the images
Like ypu make a topic na when i tell you
cd /tmp/workspace/liver-notes/images && python3 -m http.server 8765 &>/tmp/img_server.log & sleep 1 && echo "Server started, PID=$!" && curl -s -o /dev/null -w "%{http_code}" http://localhost:8765/page_1.png
pip install --user pytesseract 2>&1 | tail -3; pip install --user tesseract 2>&1 | tail -3
# Try using the Pillow-based OCR or check if any vision API is available via python python3 -c "import pytesseract; pytesseract.get_tesseract_version()" 2>&1 # Also check if markitdown can handle images python3 -c "from markitdown import MarkItDown; m = MarkItDown(); r = m.convert('/tmp/workspace/liver-notes/images/page_1.png'); print(r.text_content[:500])" 2>&1
python3 -c "from markitdown import MarkItDown; m = MarkItDown(); r = m.convert('/tmp/workspace/liver-notes/images/page_1.png'); print(r.text_content[:500])" 2>&1
# Try markitdown on the original PDF python3 -c " from markitdown import MarkItDown m = MarkItDown() r = m.convert('/tmp/workspace/attachments/13b8af4f-3f22-4357-a012-90ae39c65d66/MD_Anaesthesiology_Liver_Topics_Notes.pdf') print(len(r.text_content)) print(r.text_content[:1000]) " 2>&1
python3 << 'EOF' import os, io from PIL import Image from reportlab.pdfgen import canvas as rl_canvas from reportlab.lib.pagesizes import A4 from reportlab.lib import colors from reportlab.lib.units import mm, cm from reportlab.pdfbase import pdfmetrics from reportlab.pdfbase.ttfonts import TTFont from pypdf import PdfWriter, PdfReader img_dir = '/tmp/workspace/liver-notes/images' output_path = '/tmp/workspace/liver-notes/Liver_Notes_BookStyle.pdf' # All pages will be A4 portrait (book style) PAGE_W, PAGE_H = A4 # 595 x 842 pts # Margins TOP_MARGIN = 18 * mm BOTTOM_MARGIN = 18 * mm SIDE_MARGIN = 15 * mm # Header bar height HEADER_H = 12 * mm FOOTER_H = 10 * mm # Colors HEADER_COLOR = colors.HexColor('#1a3a5c') # dark navy ACCENT_COLOR = colors.HexColor('#2d7bbf') # medium blue BG_COLOR = colors.HexColor('#f5f7fa') # light grey-white page bg LINE_COLOR = colors.HexColor('#c8d8e8') image_files = sorted([f for f in os.listdir(img_dir) if f.endswith('.png')]) writer = PdfWriter() # ── COVER PAGE ────────────────────────────────────────────────────────────── buf = io.BytesIO() c = rl_canvas.Canvas(buf, pagesize=(PAGE_W, PAGE_H)) # Background gradient-like fill c.setFillColor(colors.HexColor('#0d2137')) c.rect(0, 0, PAGE_W, PAGE_H, fill=1, stroke=0) # Decorative top stripe c.setFillColor(ACCENT_COLOR) c.rect(0, PAGE_H - 6*mm, PAGE_W, 6*mm, fill=1, stroke=0) c.setFillColor(colors.HexColor('#e8a020')) c.rect(0, PAGE_H - 9*mm, PAGE_W, 3*mm, fill=1, stroke=0) # Decorative bottom stripe c.setFillColor(ACCENT_COLOR) c.rect(0, 0, PAGE_W, 6*mm, fill=1, stroke=0) c.setFillColor(colors.HexColor('#e8a020')) c.rect(0, 6*mm, PAGE_W, 3*mm, fill=1, stroke=0) # Title block c.setFillColor(colors.white) c.setFont('Helvetica-Bold', 28) c.drawCentredString(PAGE_W/2, PAGE_H*0.65, 'MD ANAESTHESIOLOGY') c.setFillColor(colors.HexColor('#e8a020')) c.setFont('Helvetica-Bold', 22) c.drawCentredString(PAGE_W/2, PAGE_H*0.57, 'Liver Topics') c.setFillColor(colors.HexColor('#90b8d8')) c.setFont('Helvetica', 16) c.drawCentredString(PAGE_W/2, PAGE_H*0.50, 'Study Notes') # Divider line c.setStrokeColor(ACCENT_COLOR) c.setLineWidth(1.5) c.line(PAGE_W*0.2, PAGE_H*0.47, PAGE_W*0.8, PAGE_H*0.47) # Subtitle c.setFillColor(colors.HexColor('#c0d0e0')) c.setFont('Helvetica', 11) c.drawCentredString(PAGE_W/2, PAGE_H*0.42, 'Hepatic Physiology • Liver Disease • Anaesthetic Management') # Page count c.setFillColor(colors.HexColor('#607080')) c.setFont('Helvetica', 10) c.drawCentredString(PAGE_W/2, PAGE_H*0.20, f'{len(image_files)} pages of notes') c.save() buf.seek(0) reader = PdfReader(buf) writer.add_page(reader.pages[0]) print('Cover page done') # ── CONTENT PAGES ──────────────────────────────────────────────────────────── for page_num, fname in enumerate(image_files, start=1): img_path = os.path.join(img_dir, fname) pil_img = Image.open(img_path) iw, ih = pil_img.size # Save image as JPEG temp tmp_jpg = f'/tmp/workspace/liver-notes/images/tmp_page_{page_num}.jpg' pil_img.convert('RGB').save(tmp_jpg, format='JPEG', quality=92) buf = io.BytesIO() c = rl_canvas.Canvas(buf, pagesize=(PAGE_W, PAGE_H)) # ── Background c.setFillColor(BG_COLOR) c.rect(0, 0, PAGE_W, PAGE_H, fill=1, stroke=0) # ── Header bar c.setFillColor(HEADER_COLOR) c.rect(0, PAGE_H - HEADER_H, PAGE_W, HEADER_H, fill=1, stroke=0) # Thin accent line below header c.setFillColor(colors.HexColor('#e8a020')) c.rect(0, PAGE_H - HEADER_H - 2*mm, PAGE_W, 2*mm, fill=1, stroke=0) # Header text c.setFillColor(colors.white) c.setFont('Helvetica-Bold', 10) c.drawString(SIDE_MARGIN, PAGE_H - HEADER_H + 4*mm, 'MD ANAESTHESIOLOGY | LIVER TOPICS') c.setFont('Helvetica', 9) c.drawRightString(PAGE_W - SIDE_MARGIN, PAGE_H - HEADER_H + 4*mm, f'Notes') # ── Footer c.setFillColor(HEADER_COLOR) c.rect(0, 0, PAGE_W, FOOTER_H, fill=1, stroke=0) c.setFillColor(colors.HexColor('#e8a020')) c.rect(0, FOOTER_H, PAGE_W, 1.5*mm, fill=1, stroke=0) # Page number in footer c.setFillColor(colors.white) c.setFont('Helvetica', 9) c.drawCentredString(PAGE_W/2, FOOTER_H*0.3, f'Page {page_num} of {len(image_files)}') # ── Image area img_area_top = PAGE_H - HEADER_H - 2*mm - 4*mm # just below accent line img_area_bottom = FOOTER_H + 1.5*mm + 4*mm # just above footer line img_area_w = PAGE_W - 2 * SIDE_MARGIN img_area_h = img_area_top - img_area_bottom # Scale image to fill area preserving aspect ratio scale = min(img_area_w / iw, img_area_h / ih) draw_w = iw * scale draw_h = ih * scale x = (PAGE_W - draw_w) / 2 y = img_area_bottom + (img_area_h - draw_h) / 2 # White card shadow effect shadow_off = 1.5*mm c.setFillColor(colors.HexColor('#c8d0d8')) c.roundRect(x + shadow_off, y - shadow_off, draw_w, draw_h, 3*mm, fill=1, stroke=0) # White card behind image c.setFillColor(colors.white) c.roundRect(x, y, draw_w, draw_h, 3*mm, fill=1, stroke=0) # Draw image c.drawImage(tmp_jpg, x, y, width=draw_w, height=draw_h, preserveAspectRatio=True, mask='auto') c.save() os.remove(tmp_jpg) buf.seek(0) reader = PdfReader(buf) writer.add_page(reader.pages[0]) print(f' Page {page_num}: {fname}') with open(output_path, 'wb') as f: writer.write(f) size_kb = os.path.getsize(output_path) / 1024 print(f'\nSaved: {output_path} ({size_kb:.0f} KB)') EOF
Liver Notes BookStyle
PDF Document · PDF