Files
PaperPod/paperpod/pdf/__init__.py
T
ilia 2c28a623fb Add OCR naming and PNG-to-PDF export (modules 5-7, single-page only)
- ocr/: Tesseract-based vendor/date/total extraction. PSM 6 (single
  uniform text block) instead of the default fixes receipts where
  item-name/price columns were otherwise split into separate blocks and
  dropped. Vendor line picked by median (not max) word height within the
  top fraction of the crop, breaking ties by topmost line - max() was
  fooled by single descender/ascender glyphs (commas, parens) inflating
  one word's bounding box.
- naming/: merge OCR metadata into YYYY-MM-DD_vendor.pdf filenames,
  degrading gracefully to UNSORTED_<timestamp>.pdf; per-run dedup.
- pdf/: img2pdf-based multi-page-capable assembly (images_to_pdf).
- pipeline.run_export(): OCR + name + PDF each detected crop from a
  detect() report, writes pdf/ and export_summary.csv.
- New `paperpod export <video>` CLI command.
- Verified against synthetic Home Depot/Metro/Petro-Canada receipts:
  3/3 correct vendor, date, and total after tuning.

Known limitation (documented in README): no page-flip/multi-page
grouping yet (that's events/, still unbuilt) - every detected document
becomes its own single-page PDF.
2026-07-07 18:04:06 -04:00

14 lines
552 B
Python

"""Module 7 (partial): assemble page images into PDFs (img2pdf).
images_to_pdf() supports multi-page PDFs given an ordered list of image
paths, but nothing yet decides *which* crops belong together as one
document — that's module 3 (events/, page-flip vs. new-document detection),
which isn't built. Until then, paperpod.pipeline.export_pdfs treats every
detected crop as its own single-page PDF. Staging into a Paperless-ngx
consume directory is also not wired up yet.
"""
from paperpod.pdf.build import images_to_pdf
__all__ = ["images_to_pdf"]