Move highlights and notes from an old PDF to its revised edition, reviewing each one.
翻译准备中
正在加载完整 README。
查看完整 README ↗Move embedded PDF annotations to a revised PDF, with a review trail. Choose the annotated old PDF and its new revision, inspect matching text and page previews, then export approved annotations into a new PDF. Original files stay unchanged. Everything runs on your computer, without accounts, uploads or AI.
It works with PDFs that have selectable text: journal articles, publisher e-books and digital textbooks, notes exported from Word or LaTeX. Scanned pages without a text layer are not supported, and OCR text layers are not validated.
Annotrail is useful when pages or line breaks move between paper drafts, course notes, or document editions. It searches text rather than copying old page coordinates. Exact text does not prove unchanged meaning: read the surrounding context before approving a suggestion.
Download your platform's portable package and SHA256SUMS from
Releases. Verify the archive's
SHA-256, then extract it into a folder you control. The app includes Java:
Annotrail.app.Annotrail/Annotrail.exe.Annotrail/bin/Annotrail in a desktop session.macOS bundle build 5 corresponds to product version 0.1.4 (shown by --version).
The macOS app uses an ad-hoc signature to verify package integrity. It is not
Developer ID signed or notarized; Windows launchers are not Authenticode signed.
OS trust prompts may apply; no security protection needs to be disabled. Headless systems can
use the included annotrail-0.1.4.jar with Java 17+.
To remove the app, close it and delete only the extracted app folder. No service, login item, browser extension, global configuration, or hidden user database is installed. Your PDFs and exported reports are ordinary files you choose.
No suitable PDFs to try yet? Use the tiny, synthetic review demo: an annotated one-page draft and a two-page revision, with one match, one ambiguous phrase, one missing phrase and one unsupported drawing. You can try the existing release without building Java or sharing a private document.
| Classification | Meaning |
|---|---|
| Unique exact text | One sufficiently long exact normalized text match; still review context |
| Needs review | Repeated/short text or a sticky-note anchor; choose a destination or skip |
| Not found | No exact text anchor found; wording may have changed or extraction failed |
| Unsupported | Annotation or page geometry outside the supported scope |
No fuzzy match or LLM decides that changed wording is equivalent. “Not found” does not establish that the content was deleted. Candidate counts are bounded; when a phrase has many matches, the report explains the limit.
Image-only scans (no OCR is performed), ink, drawings, free-text boxes, stamps, rotated pages/text, arbitrary manual text selection, encrypted files, and signed revised PDFs are excluded. OCR text-layer accuracy is not validated, and invisible text can still be extracted; review the rendered location. Active JavaScript, embedded files, launch actions and additional actions are rejected. This is a limited PDF editor, not a general hostile-PDF sandbox.
Zotero keeps annotations made in its reader in its own database, not in the PDF, so Annotrail cannot see them until they are written into a file:
Annotrail does not open or modify the Zotero database. See Zotero's annotation storage guide.
Java 17+ is required for the standalone JAR:
java -Xmx512m -jar annotrail-0.1.4.jar analyze \
--old annotated.pdf --new revision.pdf --plan plan.json
The plan contains input names/hashes, every annotation, candidate locations,
comments and author metadata. It can contain private document content.
Review it before sharing. Save explicit choices as a JSON object, using an
annotation's id as the key and a zero-based candidate index or -1 to skip:
{"p1-a0": 0, "p2-a0": -1}
IDs above illustrate the format; always use the actual IDs in your plan. Every annotation must have a decision. Then:
以上为 README 的开头部分。其余内容请阅读原文。 查看完整 README ↗