Skip to content

v1.1.3 — Tools that never worked, and a dependency gate that was backwards

Choose a tag to compare

@romizone romizone released this 26 Jul 07:32
· 8 commits to main since this release

⚠️ The .dmg originally attached here was rejected by macOS as "damaged" — the build invalidated its own code signature. It has been removed. Download the fixed disk image from v1.1.4; it contains every fix listed below.

A bug-fix release. Several tools had never worked, and the dependency
detection added in 1.1.2 was inverted in places — hiding tools that were
fine and offering tools that were not.

Tools that were broken and now work

  • OCR produced nothing at all. The page image was handed to PyMuPDF as a PIL image where a Pixmap was required, so every run failed on the first page with pixmap must be a Pixmap, for every input.
  • Split by Bookmarks always reported "Bookmarks found but no valid page targets". Page targets were resolved through a pikepdf method that does not exist, and the resulting AttributeError was swallowed. Named destinations and /GoTo actions are now resolved properly.
  • Split by Size failed as soon as a split was actually needed. It only ever succeeded when the whole document fitted in one chunk.
  • Watermark (image) raised TypeError on every run: insert_image has no opacity parameter, and its rotate only accepts multiples of 90.
  • Watermark (text) was never rotated — the default 45° rounded to 0°.
  • Bates Numbering crashed with NameError: name 'Path' is not defined whenever the output folder was left empty.
  • Organize Pages silently did nothing: the new order was sorted before use, so 3,1,2,4 became 1,2,3,4 and the output matched the input.
  • Compress silently skipped grayscale and transparent images, reporting success with no size reduction.

Dependency detection

  • Tesseract, cairo and pango are now found under the Homebrew prefixes. Launched from Finder, an app bundle gets a PATH and a library search path that exclude /opt/homebrew, so 1.1.2 dimmed OCR, Deskew and HTML → PDF on machines where those dependencies were installed and working.
  • Word → PDF was gated on "is this macOS", which is neither necessary nor sufficient. It is now available whenever Apple Pages or the WeasyPrint fallback can do the job — including on Linux and Windows, where 1.1.2 blocked it despite the fallback working.
  • OCR and Deskew also check for the pytesseract binding, not just the binary.
  • Detection no longer imports WeasyPrint at startup, which cost over three seconds on every launch.
  • Dependencies are re-checked when you return to the home page, so installing one no longer requires restarting the app.

Interface

  • Colours follow the PdfRomeo palette, defined in one place in app/ui/styles.py.
  • Closing a document with ⌘W re-dims the tools that need one.
  • Tools that write several files now ask for a folder. Picking a file meant the app created a directory literally named output.pdf.
  • Leaving a tool while it is still working now asks first. It used to destroy the running thread, which aborts the process.
  • Options are locked while a job runs, so its inputs cannot change underneath it.
  • Split's default range 1- means "to the end of the document" again, rather than page 1 only.
  • Fill & Sign no longer writes an output file when no field matched, and reports the real error when saving fails.
  • The About box shows the running version instead of a hardcoded 1.0.

Build

  • py2app's strip pass corrupted the Qt plugins, leaving a bundle that could not load a platform plugin. Two invalid options (plist_strings, install_requires) aborted the build outright.
  • The app now depends on PySide6-Essentials and prunes Qt frameworks outside its dependency closure: 1.3 GB down to 400 MB.
  • Building requires Python 3.11 — Qt's platform plugins do not load under the Python 3.9 that ships with Xcode.

tests/regression.py covers each fix above.

Full changelog: v1.1.2...v1.1.3