41 lines
1.1 KiB
Python
41 lines
1.1 KiB
Python
"""Convert PDF files to per-page images using PyMuPDF (no poppler dependency)."""
|
|
|
|
import uuid
|
|
from datetime import date
|
|
from pathlib import Path
|
|
|
|
from config import UPLOAD_DIR
|
|
|
|
|
|
def pdf_to_images(pdf_bytes: bytes, original_name: str) -> list[dict]:
|
|
"""
|
|
Convert a PDF to individual page images.
|
|
Returns list of dicts: [{"image_path": "relative/path.png", "page_number": 1}, ...]
|
|
"""
|
|
import fitz # PyMuPDF
|
|
|
|
doc = fitz.open(stream=pdf_bytes, filetype="pdf")
|
|
group_id = uuid.uuid4().hex
|
|
today = date.today().isoformat()
|
|
dest_dir = Path(UPLOAD_DIR) / today
|
|
dest_dir.mkdir(parents=True, exist_ok=True)
|
|
|
|
pages = []
|
|
for page_num in range(len(doc)):
|
|
page = doc[page_num]
|
|
# Render at 200 DPI for good OCR quality
|
|
pix = page.get_pixmap(dpi=200)
|
|
|
|
filename = f"{group_id}_p{page_num + 1}.png"
|
|
dest = dest_dir / filename
|
|
pix.save(str(dest))
|
|
|
|
pages.append({
|
|
"image_path": str(Path(today) / filename),
|
|
"page_number": page_num + 1,
|
|
"pdf_group_id": group_id,
|
|
})
|
|
|
|
doc.close()
|
|
return pages
|