Skip to content

Repository files navigation

PDF Destinator

An interactive GUI tool to add named destinations and clickable link regions to PDF files - without expensive software like Adobe Acrobat.

Features

  • Visual PDF navigation with zoom and page controls
  • Click to set destination positions for internal navigation
  • Drag to create link regions pointing to destinations or external URLs
  • Load/save destinations - preserves existing destinations in PDF
  • Hover-to-delete link regions with visual feedback
  • Mouse wheel scrolling with automatic page changes at boundaries
  • Keyboard shortcuts for efficient workflow
  • JSON configuration support for batch workflows
  • Diagnose mode to inspect existing PDF structure
  • PDF outline/TOC generation for reader sidebar navigation

Installation

pip install pdf-destinator

System Requirements

  • Python 3.8+
  • tkinter (GUI toolkit)

Windows: tkinter is included with the standard Python installer - no extra steps needed.

Linux: Install tkinter separately:

sudo apt-get install python3-tk # Debian/Ubuntu
sudo dnf install python3-tkinter # Fedora

macOS: Included with python.org installer. If using Homebrew Python:

brew install python-tk

Usage

Basic Usage

Open a PDF and add destinations interactively:

pdf-destinator document.pdf

With Pre-defined Titles

Pre-populate the destination list with titles:

pdf-destinator document.pdf --titles "Introduction""Chapter 1""Chapter 2""Conclusion"

With JSON Configuration

Load destinations from a JSON file:

pdf-destinator document.pdf --json destinations.json

JSON format:

[
{
"pdfFile": "document.pdf",
"destinations": [
{ "id": "intro", "title": "Introduction" },
{ "id": "chapter-1", "title": "Chapter 1" },
{ "id": "https://example.com", "title": "External Link", "type": "url" }
]
}
]

Diagnose Mode

Inspect existing destinations and links in a PDF:

pdf-destinator document.pdf --diagnose

Generate PDF Outline/TOC

Generate a PDF outline (table of contents) that appears in PDF reader sidebars (like Evince, Adobe Reader, ReadEra, etc.).

Note: Link annotations (clickable regions on pages) are different from the PDF outline. The outline is what PDF readers display in their navigation sidebar. This feature creates that outline structure.

Command-line options:

# From named destinations in the PDF
pdf-destinator document.pdf --toc
# From links on specific TOC pages (extracts link text as titles)
pdf-destinator document.pdf --toc-from-links 3 5
# Both methods combined
pdf-destinator document.pdf --toc --toc-from-links 3 5

GUI options:

Use the "TOC" dropdown in the action bar before saving:

OptionDescription
NoneNo TOC generation (default)
From destinationsCreate TOC from all positioned destinations
From page linksExtract TOC from links on specified pages
BothCombine both methods

When "From page links" or "Both" is selected, enter the page range in the "Pages" field:

  • 3-5 - pages 3 to 5
  • 1,3,5 - specific pages
  • 2-4,7 - combination

Workflow

  1. Open PDF - Run pdf-destinator with your PDF file
  2. Navigate - Use arrow keys or buttons to browse pages, or click the page indicator to jump to a specific page
  3. Click - Click on the page to set a destination position
  4. Drag - Drag a rectangle to create a clickable link region
  5. Delete - Hover over a link region (cursor changes to X) and click to delete
  6. TOC - Optionally select TOC generation mode before saving
  7. Save - Click "Save and quit" when done

Keyboard Shortcuts

KeyAction
Left/RightNavigate pages
Up/DownNavigate destinations
Mouse wheelScroll page (changes pages at boundaries)

Page Navigation

Click the page indicator button (e.g., "Page 1 / 10") to open a dialog where you can jump directly to any page number.

Mouse Actions

ActionResult
ClickSet destination position at click location
DragCreate link region pointing to current destination
Hover + Click on linkDelete the link region

Status Indicators

In the destination list:

  • [x] - Destination has a position set
  • [o] - Destination exists in PDF (loaded)
  • [ ] - Destination needs a position
  • [URL] - External URL (no position needed)

Use Cases

  • Create table of contents links in newsletters or reports
  • Add navigation to long PDF documents
  • Link external resources from PDF pages
  • Fix or update existing PDF destinations
  • Batch processing with JSON configuration
  • Generate PDF outline/TOC so destinations appear in reader sidebars

Python API

You can also use pdf-destinator programmatically:

frompdf_destinatorimportPDFDestinationPickerdestinations= [
{"id": "intro", "title": "Introduction"},
{"id": "chapter-1", "title": "Chapter 1"},
]
app=PDFDestinationPicker("document.pdf", destinations)
app.run()

Dependencies

  • PyMuPDF - PDF rendering and link annotations
  • pypdf - Named destinations
  • Pillow - Image processing for display

License

MIT License - see LICENSE file.

Contributing

Contributions welcome! Please open an issue or pull request on GitHub.

Acknowledgments

Created with the help of Claude (Anthropic) as a free alternative to expensive PDF editing tools.

About

Add clickable links and navigation to PDFs - free alternative when Adobe Acrobat is overkill.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - SnowlionAI/pdf-destinator: Add clickable links and navigation to PDFs - free alternative when Adobe Acrobat is overkill. · GitHub
Skip to content

Repository files navigation

PDF Destinator

An interactive GUI tool to add named destinations and clickable link regions to PDF files - without expensive software like Adobe Acrobat.

Features

  • Visual PDF navigation with zoom and page controls
  • Click to set destination positions for internal navigation
  • Drag to create link regions pointing to destinations or external URLs
  • Load/save destinations - preserves existing destinations in PDF
  • Hover-to-delete link regions with visual feedback
  • Mouse wheel scrolling with automatic page changes at boundaries
  • Keyboard shortcuts for efficient workflow
  • JSON configuration support for batch workflows
  • Diagnose mode to inspect existing PDF structure
  • PDF outline/TOC generation for reader sidebar navigation

Installation

pip install pdf-destinator

System Requirements

  • Python 3.8+
  • tkinter (GUI toolkit)

Windows: tkinter is included with the standard Python installer - no extra steps needed.

Linux: Install tkinter separately:

sudo apt-get install python3-tk # Debian/Ubuntu
sudo dnf install python3-tkinter # Fedora

macOS: Included with python.org installer. If using Homebrew Python:

brew install python-tk

Usage

Basic Usage

Open a PDF and add destinations interactively:

pdf-destinator document.pdf

With Pre-defined Titles

Pre-populate the destination list with titles:

pdf-destinator document.pdf --titles "Introduction""Chapter 1""Chapter 2""Conclusion"

With JSON Configuration

Load destinations from a JSON file:

pdf-destinator document.pdf --json destinations.json

JSON format:

[
{
"pdfFile": "document.pdf",
"destinations": [
{ "id": "intro", "title": "Introduction" },
{ "id": "chapter-1", "title": "Chapter 1" },
{ "id": "https://example.com", "title": "External Link", "type": "url" }
]
}
]

Diagnose Mode

Inspect existing destinations and links in a PDF:

pdf-destinator document.pdf --diagnose

Generate PDF Outline/TOC

Generate a PDF outline (table of contents) that appears in PDF reader sidebars (like Evince, Adobe Reader, ReadEra, etc.).

Note: Link annotations (clickable regions on pages) are different from the PDF outline. The outline is what PDF readers display in their navigation sidebar. This feature creates that outline structure.

Command-line options:

# From named destinations in the PDF
pdf-destinator document.pdf --toc
# From links on specific TOC pages (extracts link text as titles)
pdf-destinator document.pdf --toc-from-links 3 5
# Both methods combined
pdf-destinator document.pdf --toc --toc-from-links 3 5

GUI options:

Use the "TOC" dropdown in the action bar before saving:

OptionDescription
NoneNo TOC generation (default)
From destinationsCreate TOC from all positioned destinations
From page linksExtract TOC from links on specified pages
BothCombine both methods

When "From page links" or "Both" is selected, enter the page range in the "Pages" field:

  • 3-5 - pages 3 to 5
  • 1,3,5 - specific pages
  • 2-4,7 - combination

Workflow

  1. Open PDF - Run pdf-destinator with your PDF file
  2. Navigate - Use arrow keys or buttons to browse pages, or click the page indicator to jump to a specific page
  3. Click - Click on the page to set a destination position
  4. Drag - Drag a rectangle to create a clickable link region
  5. Delete - Hover over a link region (cursor changes to X) and click to delete
  6. TOC - Optionally select TOC generation mode before saving
  7. Save - Click "Save and quit" when done

Keyboard Shortcuts

KeyAction
Left/RightNavigate pages
Up/DownNavigate destinations
Mouse wheelScroll page (changes pages at boundaries)

Page Navigation

Click the page indicator button (e.g., "Page 1 / 10") to open a dialog where you can jump directly to any page number.

Mouse Actions

ActionResult
ClickSet destination position at click location
DragCreate link region pointing to current destination
Hover + Click on linkDelete the link region

Status Indicators

In the destination list:

  • [x] - Destination has a position set
  • [o] - Destination exists in PDF (loaded)
  • [ ] - Destination needs a position
  • [URL] - External URL (no position needed)

Use Cases

  • Create table of contents links in newsletters or reports
  • Add navigation to long PDF documents
  • Link external resources from PDF pages
  • Fix or update existing PDF destinations
  • Batch processing with JSON configuration
  • Generate PDF outline/TOC so destinations appear in reader sidebars

Python API

You can also use pdf-destinator programmatically:

frompdf_destinatorimportPDFDestinationPickerdestinations= [
{"id": "intro", "title": "Introduction"},
{"id": "chapter-1", "title": "Chapter 1"},
]
app=PDFDestinationPicker("document.pdf", destinations)
app.run()

Dependencies

  • PyMuPDF - PDF rendering and link annotations
  • pypdf - Named destinations
  • Pillow - Image processing for display

License

MIT License - see LICENSE file.

Contributing

Contributions welcome! Please open an issue or pull request on GitHub.

Acknowledgments

Created with the help of Claude (Anthropic) as a free alternative to expensive PDF editing tools.

About

Add clickable links and navigation to PDFs - free alternative when Adobe Acrobat is overkill.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - SnowlionAI/pdf-destinator: Add clickable links and navigation to PDFs - free alternative when Adobe Acrobat is overkill. · GitHub
Skip to content

Repository files navigation

PDF Destinator

An interactive GUI tool to add named destinations and clickable link regions to PDF files - without expensive software like Adobe Acrobat.

Features

  • Visual PDF navigation with zoom and page controls
  • Click to set destination positions for internal navigation
  • Drag to create link regions pointing to destinations or external URLs
  • Load/save destinations - preserves existing destinations in PDF
  • Hover-to-delete link regions with visual feedback
  • Mouse wheel scrolling with automatic page changes at boundaries
  • Keyboard shortcuts for efficient workflow
  • JSON configuration support for batch workflows
  • Diagnose mode to inspect existing PDF structure
  • PDF outline/TOC generation for reader sidebar navigation

Installation

pip install pdf-destinator

System Requirements

  • Python 3.8+
  • tkinter (GUI toolkit)

Windows: tkinter is included with the standard Python installer - no extra steps needed.

Linux: Install tkinter separately:

sudo apt-get install python3-tk # Debian/Ubuntu
sudo dnf install python3-tkinter # Fedora

macOS: Included with python.org installer. If using Homebrew Python:

brew install python-tk

Usage

Basic Usage

Open a PDF and add destinations interactively:

pdf-destinator document.pdf

With Pre-defined Titles

Pre-populate the destination list with titles:

pdf-destinator document.pdf --titles "Introduction""Chapter 1""Chapter 2""Conclusion"

With JSON Configuration

Load destinations from a JSON file:

pdf-destinator document.pdf --json destinations.json

JSON format:

[
{
"pdfFile": "document.pdf",
"destinations": [
{ "id": "intro", "title": "Introduction" },
{ "id": "chapter-1", "title": "Chapter 1" },
{ "id": "https://example.com", "title": "External Link", "type": "url" }
]
}
]

Diagnose Mode

Inspect existing destinations and links in a PDF:

pdf-destinator document.pdf --diagnose

Generate PDF Outline/TOC

Generate a PDF outline (table of contents) that appears in PDF reader sidebars (like Evince, Adobe Reader, ReadEra, etc.).

Note: Link annotations (clickable regions on pages) are different from the PDF outline. The outline is what PDF readers display in their navigation sidebar. This feature creates that outline structure.

Command-line options:

# From named destinations in the PDF
pdf-destinator document.pdf --toc
# From links on specific TOC pages (extracts link text as titles)
pdf-destinator document.pdf --toc-from-links 3 5
# Both methods combined
pdf-destinator document.pdf --toc --toc-from-links 3 5

GUI options:

Use the "TOC" dropdown in the action bar before saving:

OptionDescription
NoneNo TOC generation (default)
From destinationsCreate TOC from all positioned destinations
From page linksExtract TOC from links on specified pages
BothCombine both methods

When "From page links" or "Both" is selected, enter the page range in the "Pages" field:

  • 3-5 - pages 3 to 5
  • 1,3,5 - specific pages
  • 2-4,7 - combination

Workflow

  1. Open PDF - Run pdf-destinator with your PDF file
  2. Navigate - Use arrow keys or buttons to browse pages, or click the page indicator to jump to a specific page
  3. Click - Click on the page to set a destination position
  4. Drag - Drag a rectangle to create a clickable link region
  5. Delete - Hover over a link region (cursor changes to X) and click to delete
  6. TOC - Optionally select TOC generation mode before saving
  7. Save - Click "Save and quit" when done

Keyboard Shortcuts

KeyAction
Left/RightNavigate pages
Up/DownNavigate destinations
Mouse wheelScroll page (changes pages at boundaries)

Page Navigation

Click the page indicator button (e.g., "Page 1 / 10") to open a dialog where you can jump directly to any page number.

Mouse Actions

ActionResult
ClickSet destination position at click location
DragCreate link region pointing to current destination
Hover + Click on linkDelete the link region

Status Indicators

In the destination list:

  • [x] - Destination has a position set
  • [o] - Destination exists in PDF (loaded)
  • [ ] - Destination needs a position
  • [URL] - External URL (no position needed)

Use Cases

  • Create table of contents links in newsletters or reports
  • Add navigation to long PDF documents
  • Link external resources from PDF pages
  • Fix or update existing PDF destinations
  • Batch processing with JSON configuration
  • Generate PDF outline/TOC so destinations appear in reader sidebars

Python API

You can also use pdf-destinator programmatically:

frompdf_destinatorimportPDFDestinationPickerdestinations= [
{"id": "intro", "title": "Introduction"},
{"id": "chapter-1", "title": "Chapter 1"},
]
app=PDFDestinationPicker("document.pdf", destinations)
app.run()

Dependencies

  • PyMuPDF - PDF rendering and link annotations
  • pypdf - Named destinations
  • Pillow - Image processing for display

License

MIT License - see LICENSE file.

Contributing

Contributions welcome! Please open an issue or pull request on GitHub.

Acknowledgments

Created with the help of Claude (Anthropic) as a free alternative to expensive PDF editing tools.

About

Add clickable links and navigation to PDFs - free alternative when Adobe Acrobat is overkill.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - SnowlionAI/pdf-destinator: Add clickable links and navigation to PDFs - free alternative when Adobe Acrobat is overkill. · GitHub
Skip to content

Repository files navigation

PDF Destinator

An interactive GUI tool to add named destinations and clickable link regions to PDF files - without expensive software like Adobe Acrobat.

Features

  • Visual PDF navigation with zoom and page controls
  • Click to set destination positions for internal navigation
  • Drag to create link regions pointing to destinations or external URLs
  • Load/save destinations - preserves existing destinations in PDF
  • Hover-to-delete link regions with visual feedback
  • Mouse wheel scrolling with automatic page changes at boundaries
  • Keyboard shortcuts for efficient workflow
  • JSON configuration support for batch workflows
  • Diagnose mode to inspect existing PDF structure
  • PDF outline/TOC generation for reader sidebar navigation

Installation

pip install pdf-destinator

System Requirements

  • Python 3.8+
  • tkinter (GUI toolkit)

Windows: tkinter is included with the standard Python installer - no extra steps needed.

Linux: Install tkinter separately:

sudo apt-get install python3-tk # Debian/Ubuntu
sudo dnf install python3-tkinter # Fedora

macOS: Included with python.org installer. If using Homebrew Python:

brew install python-tk

Usage

Basic Usage

Open a PDF and add destinations interactively:

pdf-destinator document.pdf

With Pre-defined Titles

Pre-populate the destination list with titles:

pdf-destinator document.pdf --titles "Introduction""Chapter 1""Chapter 2""Conclusion"

With JSON Configuration

Load destinations from a JSON file:

pdf-destinator document.pdf --json destinations.json

JSON format:

[
{
"pdfFile": "document.pdf",
"destinations": [
{ "id": "intro", "title": "Introduction" },
{ "id": "chapter-1", "title": "Chapter 1" },
{ "id": "https://example.com", "title": "External Link", "type": "url" }
]
}
]

Diagnose Mode

Inspect existing destinations and links in a PDF:

pdf-destinator document.pdf --diagnose

Generate PDF Outline/TOC

Generate a PDF outline (table of contents) that appears in PDF reader sidebars (like Evince, Adobe Reader, ReadEra, etc.).

Note: Link annotations (clickable regions on pages) are different from the PDF outline. The outline is what PDF readers display in their navigation sidebar. This feature creates that outline structure.

Command-line options:

# From named destinations in the PDF
pdf-destinator document.pdf --toc
# From links on specific TOC pages (extracts link text as titles)
pdf-destinator document.pdf --toc-from-links 3 5
# Both methods combined
pdf-destinator document.pdf --toc --toc-from-links 3 5

GUI options:

Use the "TOC" dropdown in the action bar before saving:

OptionDescription
NoneNo TOC generation (default)
From destinationsCreate TOC from all positioned destinations
From page linksExtract TOC from links on specified pages
BothCombine both methods

When "From page links" or "Both" is selected, enter the page range in the "Pages" field:

  • 3-5 - pages 3 to 5
  • 1,3,5 - specific pages
  • 2-4,7 - combination

Workflow

  1. Open PDF - Run pdf-destinator with your PDF file
  2. Navigate - Use arrow keys or buttons to browse pages, or click the page indicator to jump to a specific page
  3. Click - Click on the page to set a destination position
  4. Drag - Drag a rectangle to create a clickable link region
  5. Delete - Hover over a link region (cursor changes to X) and click to delete
  6. TOC - Optionally select TOC generation mode before saving
  7. Save - Click "Save and quit" when done

Keyboard Shortcuts

KeyAction
Left/RightNavigate pages
Up/DownNavigate destinations
Mouse wheelScroll page (changes pages at boundaries)

Page Navigation

Click the page indicator button (e.g., "Page 1 / 10") to open a dialog where you can jump directly to any page number.

Mouse Actions

ActionResult
ClickSet destination position at click location
DragCreate link region pointing to current destination
Hover + Click on linkDelete the link region

Status Indicators

In the destination list:

  • [x] - Destination has a position set
  • [o] - Destination exists in PDF (loaded)
  • [ ] - Destination needs a position
  • [URL] - External URL (no position needed)

Use Cases

  • Create table of contents links in newsletters or reports
  • Add navigation to long PDF documents
  • Link external resources from PDF pages
  • Fix or update existing PDF destinations
  • Batch processing with JSON configuration
  • Generate PDF outline/TOC so destinations appear in reader sidebars

Python API

You can also use pdf-destinator programmatically:

frompdf_destinatorimportPDFDestinationPickerdestinations= [
{"id": "intro", "title": "Introduction"},
{"id": "chapter-1", "title": "Chapter 1"},
]
app=PDFDestinationPicker("document.pdf", destinations)
app.run()

Dependencies

  • PyMuPDF - PDF rendering and link annotations
  • pypdf - Named destinations
  • Pillow - Image processing for display

License

MIT License - see LICENSE file.

Contributing

Contributions welcome! Please open an issue or pull request on GitHub.

Acknowledgments

Created with the help of Claude (Anthropic) as a free alternative to expensive PDF editing tools.

About

Add clickable links and navigation to PDFs - free alternative when Adobe Acrobat is overkill.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - SnowlionAI/pdf-destinator: Add clickable links and navigation to PDFs - free alternative when Adobe Acrobat is overkill. · GitHub
Skip to content

Repository files navigation

PDF Destinator

An interactive GUI tool to add named destinations and clickable link regions to PDF files - without expensive software like Adobe Acrobat.

Features

  • Visual PDF navigation with zoom and page controls
  • Click to set destination positions for internal navigation
  • Drag to create link regions pointing to destinations or external URLs
  • Load/save destinations - preserves existing destinations in PDF
  • Hover-to-delete link regions with visual feedback
  • Mouse wheel scrolling with automatic page changes at boundaries
  • Keyboard shortcuts for efficient workflow
  • JSON configuration support for batch workflows
  • Diagnose mode to inspect existing PDF structure
  • PDF outline/TOC generation for reader sidebar navigation

Installation

pip install pdf-destinator

System Requirements

  • Python 3.8+
  • tkinter (GUI toolkit)

Windows: tkinter is included with the standard Python installer - no extra steps needed.

Linux: Install tkinter separately:

sudo apt-get install python3-tk # Debian/Ubuntu
sudo dnf install python3-tkinter # Fedora

macOS: Included with python.org installer. If using Homebrew Python:

brew install python-tk

Usage

Basic Usage

Open a PDF and add destinations interactively:

pdf-destinator document.pdf

With Pre-defined Titles

Pre-populate the destination list with titles:

pdf-destinator document.pdf --titles "Introduction""Chapter 1""Chapter 2""Conclusion"

With JSON Configuration

Load destinations from a JSON file:

pdf-destinator document.pdf --json destinations.json

JSON format:

[
{
"pdfFile": "document.pdf",
"destinations": [
{ "id": "intro", "title": "Introduction" },
{ "id": "chapter-1", "title": "Chapter 1" },
{ "id": "https://example.com", "title": "External Link", "type": "url" }
]
}
]

Diagnose Mode

Inspect existing destinations and links in a PDF:

pdf-destinator document.pdf --diagnose

Generate PDF Outline/TOC

Generate a PDF outline (table of contents) that appears in PDF reader sidebars (like Evince, Adobe Reader, ReadEra, etc.).

Note: Link annotations (clickable regions on pages) are different from the PDF outline. The outline is what PDF readers display in their navigation sidebar. This feature creates that outline structure.

Command-line options:

# From named destinations in the PDF
pdf-destinator document.pdf --toc
# From links on specific TOC pages (extracts link text as titles)
pdf-destinator document.pdf --toc-from-links 3 5
# Both methods combined
pdf-destinator document.pdf --toc --toc-from-links 3 5

GUI options:

Use the "TOC" dropdown in the action bar before saving:

OptionDescription
NoneNo TOC generation (default)
From destinationsCreate TOC from all positioned destinations
From page linksExtract TOC from links on specified pages
BothCombine both methods

When "From page links" or "Both" is selected, enter the page range in the "Pages" field:

  • 3-5 - pages 3 to 5
  • 1,3,5 - specific pages
  • 2-4,7 - combination

Workflow

  1. Open PDF - Run pdf-destinator with your PDF file
  2. Navigate - Use arrow keys or buttons to browse pages, or click the page indicator to jump to a specific page
  3. Click - Click on the page to set a destination position
  4. Drag - Drag a rectangle to create a clickable link region
  5. Delete - Hover over a link region (cursor changes to X) and click to delete
  6. TOC - Optionally select TOC generation mode before saving
  7. Save - Click "Save and quit" when done

Keyboard Shortcuts

KeyAction
Left/RightNavigate pages
Up/DownNavigate destinations
Mouse wheelScroll page (changes pages at boundaries)

Page Navigation

Click the page indicator button (e.g., "Page 1 / 10") to open a dialog where you can jump directly to any page number.

Mouse Actions

ActionResult
ClickSet destination position at click location
DragCreate link region pointing to current destination
Hover + Click on linkDelete the link region

Status Indicators

In the destination list:

  • [x] - Destination has a position set
  • [o] - Destination exists in PDF (loaded)
  • [ ] - Destination needs a position
  • [URL] - External URL (no position needed)

Use Cases

  • Create table of contents links in newsletters or reports
  • Add navigation to long PDF documents
  • Link external resources from PDF pages
  • Fix or update existing PDF destinations
  • Batch processing with JSON configuration
  • Generate PDF outline/TOC so destinations appear in reader sidebars

Python API

You can also use pdf-destinator programmatically:

frompdf_destinatorimportPDFDestinationPickerdestinations= [
{"id": "intro", "title": "Introduction"},
{"id": "chapter-1", "title": "Chapter 1"},
]
app=PDFDestinationPicker("document.pdf", destinations)
app.run()

Dependencies

  • PyMuPDF - PDF rendering and link annotations
  • pypdf - Named destinations
  • Pillow - Image processing for display

License

MIT License - see LICENSE file.

Contributing

Contributions welcome! Please open an issue or pull request on GitHub.

Acknowledgments

Created with the help of Claude (Anthropic) as a free alternative to expensive PDF editing tools.

About

Add clickable links and navigation to PDFs - free alternative when Adobe Acrobat is overkill.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - SnowlionAI/pdf-destinator: Add clickable links and navigation to PDFs - free alternative when Adobe Acrobat is overkill. · GitHub
Skip to content

Repository files navigation

PDF Destinator

An interactive GUI tool to add named destinations and clickable link regions to PDF files - without expensive software like Adobe Acrobat.

Features

  • Visual PDF navigation with zoom and page controls
  • Click to set destination positions for internal navigation
  • Drag to create link regions pointing to destinations or external URLs
  • Load/save destinations - preserves existing destinations in PDF
  • Hover-to-delete link regions with visual feedback
  • Mouse wheel scrolling with automatic page changes at boundaries
  • Keyboard shortcuts for efficient workflow
  • JSON configuration support for batch workflows
  • Diagnose mode to inspect existing PDF structure
  • PDF outline/TOC generation for reader sidebar navigation

Installation

pip install pdf-destinator

System Requirements

  • Python 3.8+
  • tkinter (GUI toolkit)

Windows: tkinter is included with the standard Python installer - no extra steps needed.

Linux: Install tkinter separately:

sudo apt-get install python3-tk # Debian/Ubuntu
sudo dnf install python3-tkinter # Fedora

macOS: Included with python.org installer. If using Homebrew Python:

brew install python-tk

Usage

Basic Usage

Open a PDF and add destinations interactively:

pdf-destinator document.pdf

With Pre-defined Titles

Pre-populate the destination list with titles:

pdf-destinator document.pdf --titles "Introduction""Chapter 1""Chapter 2""Conclusion"

With JSON Configuration

Load destinations from a JSON file:

pdf-destinator document.pdf --json destinations.json

JSON format:

[
{
"pdfFile": "document.pdf",
"destinations": [
{ "id": "intro", "title": "Introduction" },
{ "id": "chapter-1", "title": "Chapter 1" },
{ "id": "https://example.com", "title": "External Link", "type": "url" }
]
}
]

Diagnose Mode

Inspect existing destinations and links in a PDF:

pdf-destinator document.pdf --diagnose

Generate PDF Outline/TOC

Generate a PDF outline (table of contents) that appears in PDF reader sidebars (like Evince, Adobe Reader, ReadEra, etc.).

Note: Link annotations (clickable regions on pages) are different from the PDF outline. The outline is what PDF readers display in their navigation sidebar. This feature creates that outline structure.

Command-line options:

# From named destinations in the PDF
pdf-destinator document.pdf --toc
# From links on specific TOC pages (extracts link text as titles)
pdf-destinator document.pdf --toc-from-links 3 5
# Both methods combined
pdf-destinator document.pdf --toc --toc-from-links 3 5

GUI options:

Use the "TOC" dropdown in the action bar before saving:

OptionDescription
NoneNo TOC generation (default)
From destinationsCreate TOC from all positioned destinations
From page linksExtract TOC from links on specified pages
BothCombine both methods

When "From page links" or "Both" is selected, enter the page range in the "Pages" field:

  • 3-5 - pages 3 to 5
  • 1,3,5 - specific pages
  • 2-4,7 - combination

Workflow

  1. Open PDF - Run pdf-destinator with your PDF file
  2. Navigate - Use arrow keys or buttons to browse pages, or click the page indicator to jump to a specific page
  3. Click - Click on the page to set a destination position
  4. Drag - Drag a rectangle to create a clickable link region
  5. Delete - Hover over a link region (cursor changes to X) and click to delete
  6. TOC - Optionally select TOC generation mode before saving
  7. Save - Click "Save and quit" when done

Keyboard Shortcuts

KeyAction
Left/RightNavigate pages
Up/DownNavigate destinations
Mouse wheelScroll page (changes pages at boundaries)

Page Navigation

Click the page indicator button (e.g., "Page 1 / 10") to open a dialog where you can jump directly to any page number.

Mouse Actions

ActionResult
ClickSet destination position at click location
DragCreate link region pointing to current destination
Hover + Click on linkDelete the link region

Status Indicators

In the destination list:

  • [x] - Destination has a position set
  • [o] - Destination exists in PDF (loaded)
  • [ ] - Destination needs a position
  • [URL] - External URL (no position needed)

Use Cases

  • Create table of contents links in newsletters or reports
  • Add navigation to long PDF documents
  • Link external resources from PDF pages
  • Fix or update existing PDF destinations
  • Batch processing with JSON configuration
  • Generate PDF outline/TOC so destinations appear in reader sidebars

Python API

You can also use pdf-destinator programmatically:

frompdf_destinatorimportPDFDestinationPickerdestinations= [
{"id": "intro", "title": "Introduction"},
{"id": "chapter-1", "title": "Chapter 1"},
]
app=PDFDestinationPicker("document.pdf", destinations)
app.run()

Dependencies

  • PyMuPDF - PDF rendering and link annotations
  • pypdf - Named destinations
  • Pillow - Image processing for display

License

MIT License - see LICENSE file.

Contributing

Contributions welcome! Please open an issue or pull request on GitHub.

Acknowledgments

Created with the help of Claude (Anthropic) as a free alternative to expensive PDF editing tools.

About

Add clickable links and navigation to PDFs - free alternative when Adobe Acrobat is overkill.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - SnowlionAI/pdf-destinator: Add clickable links and navigation to PDFs - free alternative when Adobe Acrobat is overkill. · GitHub
Skip to content

Repository files navigation

PDF Destinator

An interactive GUI tool to add named destinations and clickable link regions to PDF files - without expensive software like Adobe Acrobat.

Features

  • Visual PDF navigation with zoom and page controls
  • Click to set destination positions for internal navigation
  • Drag to create link regions pointing to destinations or external URLs
  • Load/save destinations - preserves existing destinations in PDF
  • Hover-to-delete link regions with visual feedback
  • Mouse wheel scrolling with automatic page changes at boundaries
  • Keyboard shortcuts for efficient workflow
  • JSON configuration support for batch workflows
  • Diagnose mode to inspect existing PDF structure
  • PDF outline/TOC generation for reader sidebar navigation

Installation

pip install pdf-destinator

System Requirements

  • Python 3.8+
  • tkinter (GUI toolkit)

Windows: tkinter is included with the standard Python installer - no extra steps needed.

Linux: Install tkinter separately:

sudo apt-get install python3-tk # Debian/Ubuntu
sudo dnf install python3-tkinter # Fedora

macOS: Included with python.org installer. If using Homebrew Python:

brew install python-tk

Usage

Basic Usage

Open a PDF and add destinations interactively:

pdf-destinator document.pdf

With Pre-defined Titles

Pre-populate the destination list with titles:

pdf-destinator document.pdf --titles "Introduction""Chapter 1""Chapter 2""Conclusion"

With JSON Configuration

Load destinations from a JSON file:

pdf-destinator document.pdf --json destinations.json

JSON format:

[
{
"pdfFile": "document.pdf",
"destinations": [
{ "id": "intro", "title": "Introduction" },
{ "id": "chapter-1", "title": "Chapter 1" },
{ "id": "https://example.com", "title": "External Link", "type": "url" }
]
}
]

Diagnose Mode

Inspect existing destinations and links in a PDF:

pdf-destinator document.pdf --diagnose

Generate PDF Outline/TOC

Generate a PDF outline (table of contents) that appears in PDF reader sidebars (like Evince, Adobe Reader, ReadEra, etc.).

Note: Link annotations (clickable regions on pages) are different from the PDF outline. The outline is what PDF readers display in their navigation sidebar. This feature creates that outline structure.

Command-line options:

# From named destinations in the PDF
pdf-destinator document.pdf --toc
# From links on specific TOC pages (extracts link text as titles)
pdf-destinator document.pdf --toc-from-links 3 5
# Both methods combined
pdf-destinator document.pdf --toc --toc-from-links 3 5

GUI options:

Use the "TOC" dropdown in the action bar before saving:

OptionDescription
NoneNo TOC generation (default)
From destinationsCreate TOC from all positioned destinations
From page linksExtract TOC from links on specified pages
BothCombine both methods

When "From page links" or "Both" is selected, enter the page range in the "Pages" field:

  • 3-5 - pages 3 to 5
  • 1,3,5 - specific pages
  • 2-4,7 - combination

Workflow

  1. Open PDF - Run pdf-destinator with your PDF file
  2. Navigate - Use arrow keys or buttons to browse pages, or click the page indicator to jump to a specific page
  3. Click - Click on the page to set a destination position
  4. Drag - Drag a rectangle to create a clickable link region
  5. Delete - Hover over a link region (cursor changes to X) and click to delete
  6. TOC - Optionally select TOC generation mode before saving
  7. Save - Click "Save and quit" when done

Keyboard Shortcuts

KeyAction
Left/RightNavigate pages
Up/DownNavigate destinations
Mouse wheelScroll page (changes pages at boundaries)

Page Navigation

Click the page indicator button (e.g., "Page 1 / 10") to open a dialog where you can jump directly to any page number.

Mouse Actions

ActionResult
ClickSet destination position at click location
DragCreate link region pointing to current destination
Hover + Click on linkDelete the link region

Status Indicators

In the destination list:

  • [x] - Destination has a position set
  • [o] - Destination exists in PDF (loaded)
  • [ ] - Destination needs a position
  • [URL] - External URL (no position needed)

Use Cases

  • Create table of contents links in newsletters or reports
  • Add navigation to long PDF documents
  • Link external resources from PDF pages
  • Fix or update existing PDF destinations
  • Batch processing with JSON configuration
  • Generate PDF outline/TOC so destinations appear in reader sidebars

Python API

You can also use pdf-destinator programmatically:

frompdf_destinatorimportPDFDestinationPickerdestinations= [
{"id": "intro", "title": "Introduction"},
{"id": "chapter-1", "title": "Chapter 1"},
]
app=PDFDestinationPicker("document.pdf", destinations)
app.run()

Dependencies

  • PyMuPDF - PDF rendering and link annotations
  • pypdf - Named destinations
  • Pillow - Image processing for display

License

MIT License - see LICENSE file.

Contributing

Contributions welcome! Please open an issue or pull request on GitHub.

Acknowledgments

Created with the help of Claude (Anthropic) as a free alternative to expensive PDF editing tools.

About

Add clickable links and navigation to PDFs - free alternative when Adobe Acrobat is overkill.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - SnowlionAI/pdf-destinator: Add clickable links and navigation to PDFs - free alternative when Adobe Acrobat is overkill. · GitHub
Skip to content

Repository files navigation

PDF Destinator

An interactive GUI tool to add named destinations and clickable link regions to PDF files - without expensive software like Adobe Acrobat.

Features

  • Visual PDF navigation with zoom and page controls
  • Click to set destination positions for internal navigation
  • Drag to create link regions pointing to destinations or external URLs
  • Load/save destinations - preserves existing destinations in PDF
  • Hover-to-delete link regions with visual feedback
  • Mouse wheel scrolling with automatic page changes at boundaries
  • Keyboard shortcuts for efficient workflow
  • JSON configuration support for batch workflows
  • Diagnose mode to inspect existing PDF structure
  • PDF outline/TOC generation for reader sidebar navigation

Installation

pip install pdf-destinator

System Requirements

  • Python 3.8+
  • tkinter (GUI toolkit)

Windows: tkinter is included with the standard Python installer - no extra steps needed.

Linux: Install tkinter separately:

sudo apt-get install python3-tk # Debian/Ubuntu
sudo dnf install python3-tkinter # Fedora

macOS: Included with python.org installer. If using Homebrew Python:

brew install python-tk

Usage

Basic Usage

Open a PDF and add destinations interactively:

pdf-destinator document.pdf

With Pre-defined Titles

Pre-populate the destination list with titles:

pdf-destinator document.pdf --titles "Introduction""Chapter 1""Chapter 2""Conclusion"

With JSON Configuration

Load destinations from a JSON file:

pdf-destinator document.pdf --json destinations.json

JSON format:

[
{
"pdfFile": "document.pdf",
"destinations": [
{ "id": "intro", "title": "Introduction" },
{ "id": "chapter-1", "title": "Chapter 1" },
{ "id": "https://example.com", "title": "External Link", "type": "url" }
]
}
]

Diagnose Mode

Inspect existing destinations and links in a PDF:

pdf-destinator document.pdf --diagnose

Generate PDF Outline/TOC

Generate a PDF outline (table of contents) that appears in PDF reader sidebars (like Evince, Adobe Reader, ReadEra, etc.).

Note: Link annotations (clickable regions on pages) are different from the PDF outline. The outline is what PDF readers display in their navigation sidebar. This feature creates that outline structure.

Command-line options:

# From named destinations in the PDF
pdf-destinator document.pdf --toc
# From links on specific TOC pages (extracts link text as titles)
pdf-destinator document.pdf --toc-from-links 3 5
# Both methods combined
pdf-destinator document.pdf --toc --toc-from-links 3 5

GUI options:

Use the "TOC" dropdown in the action bar before saving:

OptionDescription
NoneNo TOC generation (default)
From destinationsCreate TOC from all positioned destinations
From page linksExtract TOC from links on specified pages
BothCombine both methods

When "From page links" or "Both" is selected, enter the page range in the "Pages" field:

  • 3-5 - pages 3 to 5
  • 1,3,5 - specific pages
  • 2-4,7 - combination

Workflow

  1. Open PDF - Run pdf-destinator with your PDF file
  2. Navigate - Use arrow keys or buttons to browse pages, or click the page indicator to jump to a specific page
  3. Click - Click on the page to set a destination position
  4. Drag - Drag a rectangle to create a clickable link region
  5. Delete - Hover over a link region (cursor changes to X) and click to delete
  6. TOC - Optionally select TOC generation mode before saving
  7. Save - Click "Save and quit" when done

Keyboard Shortcuts

KeyAction
Left/RightNavigate pages
Up/DownNavigate destinations
Mouse wheelScroll page (changes pages at boundaries)

Page Navigation

Click the page indicator button (e.g., "Page 1 / 10") to open a dialog where you can jump directly to any page number.

Mouse Actions

ActionResult
ClickSet destination position at click location
DragCreate link region pointing to current destination
Hover + Click on linkDelete the link region

Status Indicators

In the destination list:

  • [x] - Destination has a position set
  • [o] - Destination exists in PDF (loaded)
  • [ ] - Destination needs a position
  • [URL] - External URL (no position needed)

Use Cases

  • Create table of contents links in newsletters or reports
  • Add navigation to long PDF documents
  • Link external resources from PDF pages
  • Fix or update existing PDF destinations
  • Batch processing with JSON configuration
  • Generate PDF outline/TOC so destinations appear in reader sidebars

Python API

You can also use pdf-destinator programmatically:

frompdf_destinatorimportPDFDestinationPickerdestinations= [
{"id": "intro", "title": "Introduction"},
{"id": "chapter-1", "title": "Chapter 1"},
]
app=PDFDestinationPicker("document.pdf", destinations)
app.run()

Dependencies

  • PyMuPDF - PDF rendering and link annotations
  • pypdf - Named destinations
  • Pillow - Image processing for display

License

MIT License - see LICENSE file.

Contributing

Contributions welcome! Please open an issue or pull request on GitHub.

Acknowledgments

Created with the help of Claude (Anthropic) as a free alternative to expensive PDF editing tools.

About

Add clickable links and navigation to PDFs - free alternative when Adobe Acrobat is overkill.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages