Repository navigation
Version-2.0.1
Scan Me — Release Notes
All previous releases are on GitHub: https://github.com/Tusharp21/scan_me/releases
v2.0.1
Patch release — Frappe Cloud audit compliance.
🛠 Fixes
- Added
[tool.bench.frappe-dependencies]section topyproject.tomldeclaring supported Frappe range (>=14.0.0,<=17.0.0-dev). - Removed external links from the long description (
README.md) per Frappe Cloud audit guidance. - Tightened the Advanced Print page role from
AlltoSystem User, blocking Guest / Website User access while keeping all desk users (Sales User, Accountant, Stock User, etc.) functional. - Annotated the two intentional file-system call sites (
api/pdf.py,utils/pades.py) with inline# nosemgrep: frappe-security-file-traversalmarkers — both are already gated by allow-list containment / fixed internal paths.
🔁 No behaviour changes
This release is audit / metadata only. No feature additions, no schema changes, no migrations.
v2.0.0
Major release — Chromium PDF pipeline, PAdES digital signatures, Advanced Print page, and a hardened Verified QR with tamper detection.
🚀 New features
🔐 Signing & Verification
- Multi-signer support — same document can be signed by multiple users, each with their own Verified QR
- Content hash (SHA-256) recorded at sign time — edits auto-invalidate the signature in PDFs and on the verify page
- Permanent signature lock — Verified QR records can be locked so no one, including Administrator, can modify or delete
- Stored-signature mode — server reads the user's saved signature instead of accepting client-supplied images
- Signature Type selector — one setting controls Visual Block / Cryptographic (PAdES) / Both
🖨️ Advanced Print Page (/app/scan-me-print/{DocType}/{DocName})
- Live PDF preview pane that re-renders on every option change (debounced)
- Auto-fills Print Format + Letter Head defaults per doctype
- Multi-copy (1–5) with optional comma-separated labels (Original / Duplicate / Triplicate / custom)
- Header & footer repeat modes — All pages / First only / Last only / First + Last / None
- QR / Barcode insertion at any corner of the PDF
- Acrobat-style signature card with green VERIFIED / red INVALIDATED states
- Watermark system — Document Status (auto DRAFT / CANCELLED / status) or Custom Text
- Attach-to-Document option — saves the PDF as a private attachment on download
- Breadcrumbs: DocType → DocName → Advanced Print
🧠 PAdES Digital Signatures (PyHanko)
- Optional Adobe-compatible cryptographic PDF signatures
- Self-signed certificate auto-generated on first use
- Replace the PKCS#12 bundle with a CA-issued one for Adobe's green "Signed and all signatures are valid" badge
🌐 Public Verify Page (/verify_document/)
- Redesigned mobile-first UI with dark-mode support
- Three distinct result states — Verified, Signature Invalidated (tampered), Not Recognised
- Admin-configurable detail level — Minimal / Standard (default) / Full — controls what guests see
- Rate-limited to 30 requests per 60 seconds per IP
⚙️ Settings & Form Integration
- Scan Me Settings is now a tabbed form — Allowed Documents / Verification & Signing / Public Verification / Print Dialog Features
- New "Advanced Print" icon on document forms, placed immediately right of Frappe's native Print icon
- Admin toggle to show/hide the Advanced Print icon
📄 Bundled print formats
Sales Invoice Scan Me— full-featured invoice with QR footerSO— sample Sales Order formatBasic HTML Template by Scan Me— starter skeleton users can duplicate for any doctype
📝 Bundled Letter Head
Letter Head By Scan Meships as a fixture for reference — admin can mark it default or customize as needed
🧰 Jinja helpers (for print format authors)
qr_img,qr_link_img,verify_qr,verify_qr_img— added alongside existingqr,barcode,qr_link
🧱 Dependencies added
playwright~=1.47— Chromium PDF renderingpypdf~=6.1.3— multi-copy PDF mergingpyHanko~=0.25— PAdES signingcryptography>=41— self-signed cert generation
📦 Installation
bench get-app https://github.com/Tusharp21/scan_me
bench install-app scan_meChromium for PDF rendering (~200 MB) downloads automatically via the
after_install hook. On restricted hosts where auto-download fails,
run ./env/bin/python -m playwright install chromium manually — the app will show
a clear message pointing to this fallback.
Existing installs: bench migrate runs 5 patches that backfill sensible
defaults for new settings fields and will download Chromium if it isn't
already cached.
⚠️ Known limitations
- Self-signed PAdES cert shows as "signer unknown" in Adobe until replaced with a CA-issued PFX
- Test suite is skeleton-only — real test coverage planned for 2.1
📚 Documentation
- Full wiki: https://github.com/Tusharp21/scan_me/wiki
- Functional + Technical guide shipped in the repo as
DOCUMENTATION.md
v1.0.2 — 06 Jan 2026
- System-verified QR code generation with unique document IDs
- Logo integration in QR codes
- Signature requirement for QR generation
- Doctype-based configuration via Scan Me Settings
- Public verification support with
ROOT_URL/verify_document/
Generate a unique system ID linked to a specific document, with verification URL and embedded logo.
v1.0.1 — 18 Nov 2025
- Fixed line-level issue in
jinja_functions.py - Updated function logic for accurate output rendering
- Minor code cleanup for readability
This update focuses on improving reliability in template utilities without introducing any breaking changes.
v1.0.0 — 15 Nov 2025
- Jinja functions for print formats:
qr(),barcode(),qr_link() - Global JavaScript function
add_qr_to_description() - QR/barcode generation in desk forms and print formats
- Auto-loading via
hooks.pyconfiguration