Files
playground/pdf_to_jpg.py

53 lines
1.5 KiB
Python
Executable File

#!/usr/bin/env -S uv run --script
# /// script
# dependencies = ["pdf2image", "Pillow"]
# ///
import argparse
import logging
from pathlib import Path
import pdf2image
from PIL import Image
logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s: %(message)s")
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(description="Convert PDF pages to JPG images.", formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("pdf_path", type=Path, help="Path to the PDF file.")
return parser.parse_args()
def save_images(images: list[Image.Image], save_dir: Path, base_name: str) -> None:
for i, img in enumerate(images, start=1):
width, height = img.size
if width > 2000:
ratio = 2000 / width
new_size = (2000, int(height * ratio))
img = img.resize(new_size, resample=Image.LANCZOS)
out_path = save_dir / f"{base_name}-{i:03d}.jpg"
img.save(out_path, format="JPEG")
logging.info(f"Saved {out_path}")
def main() -> None:
args = parse_args()
pdf_path: Path = args.pdf_path
if not pdf_path.exists():
logging.error(f"File not found: {pdf_path}")
return
try:
images = pdf2image.convert_from_path(pdf_path=str(pdf_path))
except Exception as e:
logging.error(f"Failed to convert PDF: {e}")
return
save_images(
images=images,
save_dir=pdf_path.parent,
base_name=pdf_path.stem,
)
if __name__ == "__main__":
main()