pdflinkcheck 1.1.73__py3-none-any.whl → 1.2.29__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pdflinkcheck/__init__.py +88 -21
- pdflinkcheck/__main__.py +6 -0
- pdflinkcheck/analysis_pdfium.py +131 -0
- pdflinkcheck/{analyze_pymupdf.py → analysis_pymupdf.py} +109 -145
- pdflinkcheck/{analyze_pypdf.py → analysis_pypdf.py} +67 -37
- pdflinkcheck/cli.py +111 -116
- pdflinkcheck/data/I Have Questions.md +51 -0
- pdflinkcheck/data/LICENSE +20 -654
- pdflinkcheck/data/README.md +65 -67
- pdflinkcheck/data/icons/BoxArt-1080x1080.png +0 -0
- pdflinkcheck/data/icons/Logo-150x150.png +0 -0
- pdflinkcheck/data/icons/Logo-300x300.png +0 -0
- pdflinkcheck/data/icons/Logo-71x71.png +0 -0
- pdflinkcheck/data/icons/PosterArt-720x1080.png +0 -0
- pdflinkcheck/data/icons/SmallLogo-44x44.png +0 -0
- pdflinkcheck/data/icons/SplashScreen-620x300.png +0 -0
- pdflinkcheck/data/icons/StoreLogo-50x50.png +0 -0
- pdflinkcheck/data/icons/WideLogo-310x150.png +0 -0
- pdflinkcheck/data/icons/red_pdf_512px.ico +0 -0
- pdflinkcheck/data/pyproject.toml +25 -37
- pdflinkcheck/data/themes/forest/forest-dark/border-accent-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/border-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/border-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/border-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/border-invalid.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/card.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/check-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/check-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/check-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/check-tri-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/check-tri-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/check-tri-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/check-unsel-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/check-unsel-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/check-unsel-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/check-unsel-pressed.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/combo-button-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/combo-button-focus.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/combo-button-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/down.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/empty.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/hor-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/hor-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/hor-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/notebook.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/off-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/off-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/off-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/on-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/on-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/on-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/radio-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/radio-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/radio-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/radio-tri-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/radio-tri-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/radio-tri-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/radio-unsel-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/radio-unsel-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/radio-unsel-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/radio-unsel-pressed.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/rect-accent-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/rect-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/rect-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/rect-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/right.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/scale-hor.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/scale-vert.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/separator.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/sizegrip.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/spin-button-down-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/spin-button-down-focus.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/spin-button-up.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/tab-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/tab-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/tab-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/thumb-hor-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/thumb-hor-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/thumb-hor-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/thumb-vert-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/thumb-vert-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/thumb-vert-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/tree-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/tree-pressed.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/up.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/vert-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/vert-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/vert-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark.tcl +536 -0
- pdflinkcheck/data/themes/forest/forest-light/border-accent-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/border-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/border-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/border-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/border-invalid.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/card.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/check-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/check-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/check-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/check-tri-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/check-tri-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/check-tri-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/check-unsel-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/check-unsel-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/check-unsel-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/check-unsel-pressed.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/combo-button-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/combo-button-focus.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/combo-button-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/down-focus.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/down.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/empty.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/hor-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/hor-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/hor-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/notebook.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/off-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/off-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/off-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/on-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/on-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/on-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/radio-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/radio-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/radio-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/radio-tri-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/radio-tri-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/radio-tri-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/radio-unsel-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/radio-unsel-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/radio-unsel-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/radio-unsel-pressed.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/rect-accent-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/rect-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/rect-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/rect-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/right-focus.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/right.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/scale-hor.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/scale-vert.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/separator.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/sizegrip.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/spin-button-down-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/spin-button-down-focus.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/spin-button-up.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/tab-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/tab-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/tab-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/thumb-hor-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/thumb-hor-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/thumb-hor-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/thumb-vert-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/thumb-vert-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/thumb-vert-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/tree-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/tree-pressed.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/up.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/vert-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/vert-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/vert-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light.tcl +544 -0
- pdflinkcheck/datacopy.py +18 -1
- pdflinkcheck/dev.py +12 -25
- pdflinkcheck/environment.py +76 -0
- pdflinkcheck/gui.py +366 -457
- pdflinkcheck/helpers.py +88 -0
- pdflinkcheck/io.py +27 -23
- pdflinkcheck/report.py +692 -121
- pdflinkcheck/security.py +189 -0
- pdflinkcheck/splash.py +38 -0
- pdflinkcheck/stdlib_server.py +14 -20
- pdflinkcheck/stdlib_server_alt.py +571 -0
- pdflinkcheck/tk_utils.py +188 -0
- pdflinkcheck/update_msix_version.py +49 -0
- pdflinkcheck/validate.py +129 -218
- pdflinkcheck/version_info.py +6 -3
- {pdflinkcheck-1.1.73.dist-info → pdflinkcheck-1.2.29.dist-info}/METADATA +84 -81
- pdflinkcheck-1.2.29.dist-info/RECORD +183 -0
- pdflinkcheck-1.2.29.dist-info/WHEEL +5 -0
- {pdflinkcheck-1.1.73.dist-info → pdflinkcheck-1.2.29.dist-info}/entry_points.txt +0 -1
- pdflinkcheck-1.2.29.dist-info/licenses/LICENSE +27 -0
- pdflinkcheck-1.2.29.dist-info/licenses/LICENSE-MIT +9 -0
- pdflinkcheck-1.2.29.dist-info/top_level.txt +1 -0
- pdflinkcheck/analyze_pypdf_v2.py +0 -218
- pdflinkcheck-1.1.73.dist-info/RECORD +0 -21
- pdflinkcheck-1.1.73.dist-info/WHEEL +0 -4
- /pdflinkcheck-1.1.73.dist-info/licenses/LICENSE → /pdflinkcheck-1.2.29.dist-info/licenses/LICENSE-AGPL3 +0 -0
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pdflinkcheck
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.2.29
|
|
4
4
|
Summary: A purpose-built PDF link analysis and reporting tool with GUI and CLI.
|
|
5
|
-
Author: George Clayton Bennett
|
|
6
5
|
Author-email: George Clayton Bennett <george.bennett@memphistn.gov>
|
|
7
|
-
|
|
6
|
+
Maintainer-email: George Clayton Bennett <george.bennett@memphistn.gov>
|
|
7
|
+
License-Expression: MIT AND AGPL-3.0-or-later
|
|
8
|
+
Project-URL: Homepage, https://github.com/city-of-memphis-wastewater/pdflinkcheck
|
|
9
|
+
Project-URL: Repository, https://github.com/city-of-memphis-wastewater/pdflinkcheck
|
|
8
10
|
Classifier: Programming Language :: Python :: 3
|
|
9
11
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
10
13
|
Classifier: Programming Language :: Python :: 3.10
|
|
11
14
|
Classifier: Programming Language :: Python :: 3.11
|
|
12
15
|
Classifier: Programming Language :: Python :: 3.12
|
|
13
16
|
Classifier: Programming Language :: Python :: 3.13
|
|
14
17
|
Classifier: Programming Language :: Python :: 3.14
|
|
15
|
-
Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
|
|
16
18
|
Classifier: Operating System :: OS Independent
|
|
17
19
|
Classifier: Intended Audience :: End Users/Desktop
|
|
18
20
|
Classifier: Intended Audience :: Developers
|
|
@@ -27,20 +29,23 @@ Classifier: Environment :: MacOS X
|
|
|
27
29
|
Classifier: Environment :: Win32 (MS Windows)
|
|
28
30
|
Classifier: Typing :: Typed
|
|
29
31
|
Classifier: Development Status :: 4 - Beta
|
|
30
|
-
Requires-
|
|
32
|
+
Requires-Python: >=3.9
|
|
33
|
+
Description-Content-Type: text/markdown
|
|
34
|
+
License-File: LICENSE
|
|
35
|
+
License-File: LICENSE-MIT
|
|
36
|
+
License-File: LICENSE-AGPL3
|
|
37
|
+
Requires-Dist: pyhabitat>=1.1.5
|
|
31
38
|
Requires-Dist: pypdf>=6.4.2
|
|
32
39
|
Requires-Dist: rich>=14.2.0
|
|
33
40
|
Requires-Dist: typer>=0.20.0
|
|
34
|
-
|
|
35
|
-
Requires-Dist:
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
Requires-Python: >=3.10
|
|
39
|
-
Project-URL: Homepage, https://github.com/city-of-memphis-wastewater/pdflinkcheck
|
|
40
|
-
Project-URL: Repository, https://github.com/city-of-memphis-wastewater/pdflinkcheck
|
|
41
|
+
Provides-Extra: mupdf
|
|
42
|
+
Requires-Dist: pymupdf<2.0.0,>=1.24.0; extra == "mupdf"
|
|
43
|
+
Provides-Extra: pdfium
|
|
44
|
+
Requires-Dist: pypdfium2<6.0.0,>=5.2.0; extra == "pdfium"
|
|
41
45
|
Provides-Extra: full
|
|
42
|
-
|
|
43
|
-
|
|
46
|
+
Requires-Dist: pymupdf<2.0.0,>=1.24.0; extra == "full"
|
|
47
|
+
Requires-Dist: pypdfium2<6.0.0,>=5.2.0; extra == "full"
|
|
48
|
+
Dynamic: license-file
|
|
44
49
|
|
|
45
50
|
# pdflinkcheck
|
|
46
51
|
|
|
@@ -48,7 +53,7 @@ A purpose-built tool for comprehensive analysis of hyperlinks and GoTo links wit
|
|
|
48
53
|
|
|
49
54
|
-----
|
|
50
55
|
|
|
51
|
-

|
|
52
57
|
|
|
53
58
|
-----
|
|
54
59
|
|
|
@@ -63,7 +68,7 @@ For the most user-typical experience, download the single-file binary matching y
|
|
|
63
68
|
| **File Type** | **Primary Use Case** | **Recommended Launch Method** |
|
|
64
69
|
| :--- | :--- | :--- |
|
|
65
70
|
| **Executable (.exe, .elf)** | **GUI** | Double-click the file. |
|
|
66
|
-
| **PYZ (Python Zip App)** | **CLI** or **GUI** | Run using your system's `python` command: `python pdflinkcheck-VERSION.pyz --help` |
|
|
71
|
+
| **PYZ (Python Zip App)** | **CLI** or **GUI** | Run using your system's `python` command: `python pdflinkcheck-VERSION.pyz --help` |
|
|
67
72
|
|
|
68
73
|
### Installation via pipx
|
|
69
74
|
|
|
@@ -86,20 +91,9 @@ The tool can be run as simple cross-platform graphical interface (Tkinter).
|
|
|
86
91
|
|
|
87
92
|
### Launching the GUI
|
|
88
93
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
1. **Implicit Launch:** Run the main command with no arguments, subcommands, or flags (`pdflinkcheck`).
|
|
94
|
+
Ways to launch the GUI interface:
|
|
95
|
+
1. **Implicit Launch:** Run the tool or file with no arguments, subcommands, or flags. (Note: PyInstaller builds use the --windowed (or -noconsole) flag, except for on Termux.)
|
|
92
96
|
2. **Explicit Command:** Use the dedicated GUI subcommand (`pdflinkcheck gui`).
|
|
93
|
-
3. **Binary Double-Click:**
|
|
94
|
-
* **Windows:** Double-click the `pdflinkcheck-VERSION-gui.bat` file.
|
|
95
|
-
* **macOS/Linux:** Double-click the downloaded `.pyz` or `.elf` file.
|
|
96
|
-
|
|
97
|
-
### Planned GUI Updates
|
|
98
|
-
|
|
99
|
-
We are actively working on the following enhancements:
|
|
100
|
-
|
|
101
|
-
* **Report Export:** Functionality to export the full analysis report to a plain text file.
|
|
102
|
-
* **License Visibility:** A dedicated "License Info" button within the GUI to display the terms of the AGPLv3+ license.
|
|
103
97
|
|
|
104
98
|
-----
|
|
105
99
|
|
|
@@ -107,20 +101,30 @@ We are actively working on the following enhancements:
|
|
|
107
101
|
|
|
108
102
|
The core functionality is accessed via the `analyze` command.
|
|
109
103
|
|
|
110
|
-
`DEV_TYPER_HELP_TREE=1 pdflinkcheck help-tree`:
|
|
111
|
-

|
|
112
|
-
|
|
113
104
|
`pdflinkcheck --help`:
|
|
114
|
-

|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
See the Help Tree by unlocking the help-tree CLI command, using the DEV_TYPER_HELP_TREE env var.
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
DEV_TYPER_HELP_TREE=1 pdflinkcheck help-tree` # bash
|
|
112
|
+
$env:DEV_TYPER_HELP_TREE = "1"; pdflinkcheck help-tree` # PowerShell
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+

|
|
116
|
+
|
|
115
117
|
|
|
116
118
|
|
|
117
119
|
### Available Commands
|
|
118
120
|
|
|
119
121
|
|**Command**|**Description**|
|
|
120
122
|
|---|---|
|
|
121
|
-
|`pdflinkcheck analyze`|Analyzes a PDF file for links
|
|
123
|
+
|`pdflinkcheck analyze`|Analyzes a PDF file for links and validates their reasonableness.|
|
|
122
124
|
|`pdflinkcheck gui`|Explicitly launch the Graphical User Interface.|
|
|
123
125
|
|`pdflinkcheck docs`|Access documentation, including the README and AGPLv3+ license.|
|
|
126
|
+
|`pdflinkcheck serve`|Serve a basic local web app which uses only the Python standard library.|
|
|
127
|
+
|`pdflinkcheck tools`|Access additional tools, like `--clear-cache`.|
|
|
124
128
|
|
|
125
129
|
### `analyze` Command Options
|
|
126
130
|
|
|
@@ -129,7 +133,6 @@ The core functionality is accessed via the `analyze` command.
|
|
|
129
133
|
|`<PDF_PATH>`|**Required.** The path to the PDF file to analyze.|N/A|
|
|
130
134
|
|`--pdf-library / -p`|Select engine: `pymupdf` or `pypdf`.|`pypdf`|
|
|
131
135
|
|`--export-format / -e`|Export to `JSON`, `TXT`, or `None` to suppress file output.|`JSON`|
|
|
132
|
-
|`--max-links / -m`|Maximum links to display per section. Use `0` for all.|`0`|
|
|
133
136
|
|
|
134
137
|
### `gui` Command Options
|
|
135
138
|
|
|
@@ -143,9 +146,6 @@ The core functionality is accessed via the `analyze` command.
|
|
|
143
146
|
# Analyze a document, show all links, and save the report as JSON and TXT
|
|
144
147
|
pdflinkcheck analyze "TE Maxson WWTF O&M Manual.pdf" --export-format JSON,TXT
|
|
145
148
|
|
|
146
|
-
# Analyze a document but keep the print block short, showing only the first 10 links for each type
|
|
147
|
-
pdflinkcheck analyze "TE Maxson WWTF O&M Manual.pdf" --max-links 10
|
|
148
|
-
|
|
149
149
|
# Show the GUI for only a moment, like in a build check
|
|
150
150
|
pdflinkcheck gui --auto-close 3000
|
|
151
151
|
|
|
@@ -157,22 +157,23 @@ pdflinkcheck docs --license --readme
|
|
|
157
157
|
|
|
158
158
|
## 📦 Library Access (Advanced)
|
|
159
159
|
|
|
160
|
-
For developers importing `pdflinkcheck` into other Python projects, the core analysis functions are exposed directly in the root namespace
|
|
160
|
+
For developers importing `pdflinkcheck` into other Python projects, the core analysis functions are exposed directly in the root namespace. The various `analysis_pdf_*` functions each use a different library to extract the target PDF's internal TOC, external links, and metadata.
|
|
161
161
|
|
|
162
|
-
|**Function**|**Description**|
|
|
163
|
-
|
|
164
|
-
|`run_report()
|
|
165
|
-
|`
|
|
166
|
-
|`
|
|
167
|
-
|`
|
|
168
|
-
|`extract_toc_pymupdf()`|Function to extract the PDF's internal Table of Contents (bookmarks/outline), using the pypdf library.|
|
|
162
|
+
|**Function**|**Library**|**Description**|
|
|
163
|
+
|---|---|---|
|
|
164
|
+
|`run_report()`|pdflinkcheck | **(Primary function)** Performs the full analysis, prints to console, and handles file export.|
|
|
165
|
+
|`analyze_pdf_pdfium()`| pypdfium2 | Fast, ~10 mb, Permissively licensed |
|
|
166
|
+
|`analyze_pdf_pymupdf()`| PyMuPDF | Fast, ~30 mb, AGPL3+ licensed |
|
|
167
|
+
|`analyze_pdf_pypdf()`| pypdf library | Slow, ~2 mb, Permissively licensed |
|
|
169
168
|
|
|
170
169
|
Exanple:
|
|
171
170
|
|
|
172
171
|
```python
|
|
173
|
-
from pdflinkcheck
|
|
174
|
-
|
|
175
|
-
|
|
172
|
+
from pdflinkcheck import ( run_report,
|
|
173
|
+
analyze_pdf_pymupdf,
|
|
174
|
+
analyze_pdf_pypdf,
|
|
175
|
+
analyze_pdf_pdfium,
|
|
176
|
+
)
|
|
176
177
|
|
|
177
178
|
file = "document1.pdf"
|
|
178
179
|
report_data = run_report(file)
|
|
@@ -232,22 +233,34 @@ This `help-tree` feature has not yet been submitted for inclusion into Typer.
|
|
|
232
233
|
|
|
233
234
|
## ⚠️ Compatibility Notes
|
|
234
235
|
|
|
235
|
-
|
|
236
|
+
### Termux Compatibility as a Key Goal
|
|
236
237
|
A key goal of City-of-Memphis-Wastewater is to release all software as Termux-compatible.
|
|
237
238
|
|
|
238
|
-
Termux compatibility is important in the modern age
|
|
239
|
+
Termux compatibility is important in the modern age, because Android devices are common among technicians, field engineers, and maintenace staff.
|
|
239
240
|
Android is the most common operating system in the Global South.
|
|
240
241
|
We aim to produce stable software that can do the most possible good.
|
|
241
242
|
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
`pypdf
|
|
243
|
+
Now `pdflinkcheck` can run on Termux by using the `pypdf` engine and the `pdfium` engine.
|
|
244
|
+
Benefits:
|
|
245
|
+
- `pypdf`-only artifacts, to reduce size to about 6% compared to artifacts that include `PyMuPDF`.
|
|
246
|
+
- Web-stack GUI as an alternative to the Tkinter GUI, which can be run locally on Termux or as a web app.
|
|
247
|
+
|
|
245
248
|
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
- Build a web-stack GUI as an alternative to the Tkinter GUI, to be compatible with Termux.
|
|
249
|
+
### PDF Library Selection
|
|
250
|
+
At long last, `PyMuPDF` is an optional dependency. All testing comparing `pypdf` and `PyMuPDF` has shown identical validation performance. However `PyMuPDF` is much faster. The benfit of `pypdf` is small size of packages and cross-platform compatibility. We have recently added a PDFium option, which circumvents the AGPL3+.
|
|
249
251
|
|
|
250
|
-
|
|
252
|
+
Expecte that all binaries and artifacts contain PyMuPDF, unlss they are built on Android. The GUI and CLI interfaces both allow selection of the library; if PyMuPDF is selected but is not available, the user will be warned.
|
|
253
|
+
|
|
254
|
+
To install the complete version use one of these options:
|
|
255
|
+
|
|
256
|
+
```bash
|
|
257
|
+
pip install "pdflinkcheck[mupdf]"
|
|
258
|
+
pipx install "pdflinkcheck[pdfium]"
|
|
259
|
+
uv tool install "pdflinkcheck[pdfium]"
|
|
260
|
+
uv add "pdflinkcheck[pdfium]"
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
---
|
|
251
264
|
|
|
252
265
|
### Document Compatibility:
|
|
253
266
|
Not all PDF files can be processed successfully. This tool is designed primarily for digitally generated (vector-based) PDFs.
|
|
@@ -259,22 +272,6 @@ Processing may fail or yield incomplete results for:
|
|
|
259
272
|
|
|
260
273
|
-----
|
|
261
274
|
|
|
262
|
-
## PDF Library Selection
|
|
263
|
-
At long last, `PyMuPDF` is an optional dependency. The default is `pypdf`. All testing has shown identical performance, though the `analyze_pymupdf.py` is faster and more direct and robust than `analyze_pypdf.py`, which requires a lot of intentional parsing.
|
|
264
|
-
|
|
265
|
-
Binaries and artifacts are expected to contain PyMuPDF, unless they are build on Android. The GUI and CLI interfaces both allow selection of the library; if PyMuPDF is selected but is not available, the user will be warned.
|
|
266
|
-
|
|
267
|
-
To install the complete version use one of these options:
|
|
268
|
-
|
|
269
|
-
```bash
|
|
270
|
-
pip install "pdflinkcheck[full]"
|
|
271
|
-
pipx install "pdflinkcheck[full]"
|
|
272
|
-
uv tool install "pdflinkcheck[full]"
|
|
273
|
-
uv add "pdflinkcheck[full]"
|
|
274
|
-
```
|
|
275
|
-
|
|
276
|
-
-----
|
|
277
|
-
|
|
278
275
|
## Run from Source (Developers)
|
|
279
276
|
|
|
280
277
|
```bash
|
|
@@ -301,22 +298,28 @@ uv run python -m pdflinkcheck.stdlib_server
|
|
|
301
298
|
|
|
302
299
|
## 📜 License Implications (AGPLv3+)
|
|
303
300
|
|
|
304
|
-
**`pdflinkcheck` is licensed under the `GNU Affero General Public License` version 3 or later (`AGPLv3+`).**
|
|
305
|
-
|
|
306
|
-
The `AGPL3+` is required for portions of this codebase because `pdflinkcheck` uses `PyMuPDF`, which is licensed under the `AGPL3`.
|
|
307
301
|
|
|
308
|
-
|
|
309
|
-
The
|
|
302
|
+
The `AGPL3-or-later` is required for binaries of `pdflinkcheck` which include `PyMuPDF`, which is licensed under the `AGPL3`.
|
|
303
|
+
The source code itself for `pdflinkcheck` is licensed under the `MIT`.
|
|
310
304
|
|
|
311
|
-
|
|
305
|
+
The AGPL3-or-later license has significant implications for **distribution and network use**, particularly for organizations:
|
|
312
306
|
|
|
313
307
|
* **Source Code Provision:** If you distribute this tool (modified or unmodified) to anyone, you **must** provide the full source code under the same license.
|
|
314
308
|
* **Network Interaction (Affero Clause):** If you modify this tool and make the modified version available to users over a computer network (e.g., as a web service or backend), you **must** also offer the source code to those network users.
|
|
315
309
|
|
|
316
310
|
> **Before deploying or modifying this tool for organizational use, especially for internal web services or distribution, please ensure compliance with the AGPLv3+ terms.**
|
|
317
311
|
|
|
312
|
+
Because the AGPLv3 is a strong copyleft license, any version of `pdflinkcheck` that includes AGPL‑licensed components (such as `PyMuPDF`) must be distributed as a whole under AGPLv3+. This means that for those versions, anyone who distributes the application — or makes a modified version available over a network — must also provide the complete corresponding source code under the same terms.
|
|
313
|
+
|
|
314
|
+
The source code of pdflinkcheck itself remains licensed under the **MIT License**; only the distributed binary becomes AGPL‑licensed when PyMuPDF is included.
|
|
315
|
+
|
|
316
|
+
|
|
318
317
|
Links:
|
|
319
318
|
- Source code: https://github.com/City-of-Memphis-Wastewater/pdflinkcheck/
|
|
320
|
-
-
|
|
319
|
+
- PyMuPDF source code: https://github.com/pymupdf/PyMuPDF/
|
|
320
|
+
- pypdfium2 source code: https://github.com/pypdfium2-team/pypdfium2
|
|
321
|
+
- pypdf source code: https://github.com/py-pdf/pypdf/
|
|
322
|
+
- AGPLv3 text (FSF): https://www.gnu.org/licenses/agpl-3.0.html
|
|
323
|
+
- MIT License text: https://opensource.org/license/mit
|
|
321
324
|
|
|
322
325
|
Copyright © 2025 George Clayton Bennett
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
pdflinkcheck/__init__.py,sha256=HOHHgzLwn3K_879klj4KiOdhyaFskcZFwKtX5l5XDX4,4441
|
|
2
|
+
pdflinkcheck/__main__.py,sha256=o2FpnQjrUbKe3oCt2LiSYsvEUfCjLSTPkxeNw9Oe2Hc,137
|
|
3
|
+
pdflinkcheck/analysis_pdfium.py,sha256=yGidq3xP9GZEZ9K0RBStNCMhq9k48PVbNQ0moMWbsCY,5077
|
|
4
|
+
pdflinkcheck/analysis_pymupdf.py,sha256=wY9V8NHm3o0puJ1pbZb4rfmknthshOXMqfyv2ex9S7E,10620
|
|
5
|
+
pdflinkcheck/analysis_pypdf.py,sha256=Av8FY05HSdLu7OhsilTTAYZT5BCBxI_dlAzRBlZnDXs,7481
|
|
6
|
+
pdflinkcheck/cli.py,sha256=n-uXUdUvG4KCJFRMGvmY95FeszOuwDZOsqvIgClKd7w,13365
|
|
7
|
+
pdflinkcheck/datacopy.py,sha256=jgVNzHwHsVp0L3fXJP3rR02CUQR96E3fGVvGWz9ZF44,3052
|
|
8
|
+
pdflinkcheck/dev.py,sha256=T6KlZYeC8yg61SshSRVD0Ja2VvrhQCIXaXjBIWYd4h4,3928
|
|
9
|
+
pdflinkcheck/environment.py,sha256=cz6J7ymfs3rnsgPucr7Hd5U9My5lkKQ2VPgPFPrLtIY,2617
|
|
10
|
+
pdflinkcheck/gui.py,sha256=aueTrjKe9mZPyJmpRTdBUeNB5kHfWIVjD7puZ6Q6Y9s,19918
|
|
11
|
+
pdflinkcheck/helpers.py,sha256=oDYm1p9cswee6DrJFhWfs3rpQXIFcVjfqmV8ZB4QcrA,3780
|
|
12
|
+
pdflinkcheck/io.py,sha256=pZPmzEMHiuqA0bPp-oPjlBNkjA996gfuZ4NZBH-8Eio,7980
|
|
13
|
+
pdflinkcheck/report.py,sha256=flVscJ-MMnaw4U1-woFy9dUKMjA3KpSs8gRegS7eVZY,33591
|
|
14
|
+
pdflinkcheck/security.py,sha256=U6U3_3utDg4lzM668c6OzDVujoo6EauHq1-JElU9_Nc,6157
|
|
15
|
+
pdflinkcheck/splash.py,sha256=u_2l6LpFpjTJianNiyY8VBAuW7bWPfq4qsKhPWRid48,1203
|
|
16
|
+
pdflinkcheck/stdlib_server.py,sha256=sKKgeHfFYlW5yAoXy4iDgMzb4Ho_rBV1OPHgS_DWZZ0,5940
|
|
17
|
+
pdflinkcheck/stdlib_server_alt.py,sha256=ixpBSd95e2a9dKE38FOCM8EtulVkpUqLWWa4oAAN6YY,16322
|
|
18
|
+
pdflinkcheck/tk_utils.py,sha256=8Y8oH-I9WNWUPUyrHlWG-GZacrQ_hn3qbZWzfN08pko,6795
|
|
19
|
+
pdflinkcheck/update_msix_version.py,sha256=RMxhpQOiieQFUF_SyCb7a5UpYF792nDgsHAP7bUAwo8,1629
|
|
20
|
+
pdflinkcheck/validate.py,sha256=H2bZopzcb5KPqdkahPT8Cg58WzSIQwdunT92JnXvdJA,11914
|
|
21
|
+
pdflinkcheck/version_info.py,sha256=h47z3TRAGXiahiPyBH2MqOXUO7x3c-iwvHV-wB_b2P0,3296
|
|
22
|
+
pdflinkcheck/data/I Have Questions.md,sha256=lurBwKxUijxysq5qsUrLgzFpaSrZwe86KjbPMwCofvY,3152
|
|
23
|
+
pdflinkcheck/data/LICENSE,sha256=npi0VqlkL0AlE0FsGEIOXxMqXlmH4toZfBHesJpP0lA,1866
|
|
24
|
+
pdflinkcheck/data/README.md,sha256=ikWkKpHkkE2cC13St6fyKSxGs9JQ05QmLzOUTIPzUOg,11235
|
|
25
|
+
pdflinkcheck/data/pyproject.toml,sha256=8IGKmhfhdqxh-_mmVEg9_rTaxw_oQ8H9JL-zfJe2pOE,2732
|
|
26
|
+
pdflinkcheck/data/icons/BoxArt-1080x1080.png,sha256=ifiadgqnq-23heD9_jEciuR1fOm-iVW9gU1Uj_2TRUA,140431
|
|
27
|
+
pdflinkcheck/data/icons/Logo-150x150.png,sha256=qEjDoeD-fSV5AmcWoYRhs1cD7o95A7ckvqjooxIqrQY,6777
|
|
28
|
+
pdflinkcheck/data/icons/Logo-300x300.png,sha256=o9zzwjFwKh7NVOilcQULMDwOYvy3EL8Afz_JpRtYhes,19479
|
|
29
|
+
pdflinkcheck/data/icons/Logo-71x71.png,sha256=aiLX990eKByKjQqnimNx1vYYVWmLTnFbhOkYfYRUdLM,2269
|
|
30
|
+
pdflinkcheck/data/icons/PosterArt-720x1080.png,sha256=dt7x7IEpxNSL2PrR55SNaPFLrW7G11qfc8yb6R6dL_Y,81882
|
|
31
|
+
pdflinkcheck/data/icons/SmallLogo-44x44.png,sha256=4DSbiMoPw3fxRTYIG-ensr18XD--ptmn6FET0261AI0,1216
|
|
32
|
+
pdflinkcheck/data/icons/SplashScreen-620x300.png,sha256=tc02X1Ykp7LrPrdjASPT6_Jj35xzVZg3v6yOIiZ5LLY,19254
|
|
33
|
+
pdflinkcheck/data/icons/StoreLogo-50x50.png,sha256=9XpM96NWn0p0X5nXlsOdYW2Djbd_n48iK0aWVLcKaM8,1424
|
|
34
|
+
pdflinkcheck/data/icons/WideLogo-310x150.png,sha256=qEjDoeD-fSV5AmcWoYRhs1cD7o95A7ckvqjooxIqrQY,6777
|
|
35
|
+
pdflinkcheck/data/icons/red_pdf_512px.ico,sha256=GxrliQQkb7DbGG3DmAzVpYKjP75C8E6Dixtaw36vH94,67646
|
|
36
|
+
pdflinkcheck/data/themes/forest/forest-dark.tcl,sha256=sMUVZOLAkU9O67IQ8pqfLIXsM_zxYJIVTe6xhqYv0hQ,18926
|
|
37
|
+
pdflinkcheck/data/themes/forest/forest-light.tcl,sha256=_HKSSTECkNYg79m7KLvGugv8dcun2_cqpdr9k88uK9U,19218
|
|
38
|
+
pdflinkcheck/data/themes/forest/forest-dark/border-accent-hover.png,sha256=GUqCh-r5m8S07gf8n9glMVRG4Wjz7Ih_pqz5rc2hA_g,385
|
|
39
|
+
pdflinkcheck/data/themes/forest/forest-dark/border-accent.png,sha256=q4y0SyxR6fuAxgKiFZubGodg72yZ30ZXlS0XZQ1m0Yw,389
|
|
40
|
+
pdflinkcheck/data/themes/forest/forest-dark/border-basic.png,sha256=xZc7CJx8cI4aKQ6HvRW3PJuH5X6WdUwQdOisaHd4nwE,333
|
|
41
|
+
pdflinkcheck/data/themes/forest/forest-dark/border-hover.png,sha256=pNUPuILYKbMCApqV2k-ql3bWV7qlbJRVQo_LG-4RKPM,337
|
|
42
|
+
pdflinkcheck/data/themes/forest/forest-dark/border-invalid.png,sha256=lAjr6mN-rFSobZk-1KS_DdO1zQ2EYHnaEed_u-VrqNs,408
|
|
43
|
+
pdflinkcheck/data/themes/forest/forest-dark/card.png,sha256=z6JvpQOyBDXaJdpscTphHHRM2Hu-tBPfFZIJmeNjbaY,374
|
|
44
|
+
pdflinkcheck/data/themes/forest/forest-dark/check-accent.png,sha256=7p1xqmL0VCRA6Y6XlrTmO-mmaSLEHHGb_rEHTIkWMeU,434
|
|
45
|
+
pdflinkcheck/data/themes/forest/forest-dark/check-basic.png,sha256=iSXBfAPYslvDqwv2v-J92Z7jL32_OJ4r1alikqkDdYY,406
|
|
46
|
+
pdflinkcheck/data/themes/forest/forest-dark/check-hover.png,sha256=6Ez1ZBJXZt539vMv1n5SAD9URw3VkEFoQ4fHOaOQGxs,434
|
|
47
|
+
pdflinkcheck/data/themes/forest/forest-dark/check-tri-accent.png,sha256=8URzJhZuVJ3YcjJs_TXV4gZYzl8hGvt6dQTfvYmOlg4,317
|
|
48
|
+
pdflinkcheck/data/themes/forest/forest-dark/check-tri-basic.png,sha256=qjX4swH4x4xo_27SOfpVXEY458vcwUkD7rxABMNpYgY,300
|
|
49
|
+
pdflinkcheck/data/themes/forest/forest-dark/check-tri-hover.png,sha256=RrAwfhLtBzjRVT8lK3kqKj9FuStnUO_Kc03slf06fts,320
|
|
50
|
+
pdflinkcheck/data/themes/forest/forest-dark/check-unsel-accent.png,sha256=Z9Ig2x_8mhfjKoiyXQJbrF4_Bb9dNbKqHMxyQyzTVTM,346
|
|
51
|
+
pdflinkcheck/data/themes/forest/forest-dark/check-unsel-basic.png,sha256=xZc7CJx8cI4aKQ6HvRW3PJuH5X6WdUwQdOisaHd4nwE,333
|
|
52
|
+
pdflinkcheck/data/themes/forest/forest-dark/check-unsel-hover.png,sha256=IG6BAOLHYMidloXAM_TACpz2Y6zDhgMKf7jWWUT1tjQ,341
|
|
53
|
+
pdflinkcheck/data/themes/forest/forest-dark/check-unsel-pressed.png,sha256=NJmygtixFXqXQaIYg_ToRmMoR1T74lGr24QU_ZAexPg,290
|
|
54
|
+
pdflinkcheck/data/themes/forest/forest-dark/combo-button-basic.png,sha256=rGZ1kUQxMPA0B9d2Ej1TBb09wR36fbOZJX2RXwBniAw,235
|
|
55
|
+
pdflinkcheck/data/themes/forest/forest-dark/combo-button-focus.png,sha256=m8ye5-iX5gMw07fZlJiqsyl3Z5SLmwQCLn4QrMZqeME,245
|
|
56
|
+
pdflinkcheck/data/themes/forest/forest-dark/combo-button-hover.png,sha256=gxLhnF3TsYdQtIE-7ioERD_sOH2E7YoFeAQwFunVFcE,239
|
|
57
|
+
pdflinkcheck/data/themes/forest/forest-dark/down.png,sha256=cbR5A3OUPzSZaKjcivQAoDRrxUcFRFIFNuZwol4dG0Y,251
|
|
58
|
+
pdflinkcheck/data/themes/forest/forest-dark/empty.png,sha256=aAISBZoamEUCCxwm-XVLjE0iquAVx-7ORJMm5_nvwRc,130
|
|
59
|
+
pdflinkcheck/data/themes/forest/forest-dark/hor-accent.png,sha256=FfaTLz2JENw8UDIyAx6ASawaZ6cT_vWUUTEQKQqcuMs,162
|
|
60
|
+
pdflinkcheck/data/themes/forest/forest-dark/hor-basic.png,sha256=cC72R2CFbMBfANPu1lHzHFCegkZay7HSULDOlBLa1Ig,162
|
|
61
|
+
pdflinkcheck/data/themes/forest/forest-dark/hor-hover.png,sha256=8PVOVKxTtgK5SwLmhWY2v4rcuwZX8AVw018zkFa6aKE,162
|
|
62
|
+
pdflinkcheck/data/themes/forest/forest-dark/notebook.png,sha256=RCNRPQHlh1UmhAd8rpxtyufpaE3uovecfk1N4yvY30c,193
|
|
63
|
+
pdflinkcheck/data/themes/forest/forest-dark/off-accent.png,sha256=ci8BrEasefL1gqB8RfsuX2NpW0bq70NcODMDhBEcSGQ,679
|
|
64
|
+
pdflinkcheck/data/themes/forest/forest-dark/off-basic.png,sha256=pXgJZSd0WYS38csH-h7u0L-ERJPgU41_wimcVaBp88Q,640
|
|
65
|
+
pdflinkcheck/data/themes/forest/forest-dark/off-hover.png,sha256=eVI35fG2wek_-Nr6_WFGaBVGBkZdEkcOQiHGE8X4i0s,692
|
|
66
|
+
pdflinkcheck/data/themes/forest/forest-dark/on-accent.png,sha256=w56MZFsZIGHbDb1DTuVZBmZ_zVihwLvG2sAL_TzBuo0,676
|
|
67
|
+
pdflinkcheck/data/themes/forest/forest-dark/on-basic.png,sha256=m7kDducspO0zKJG88w50D3HubgAxNKPsUG-Ni8j2ruM,633
|
|
68
|
+
pdflinkcheck/data/themes/forest/forest-dark/on-hover.png,sha256=uHo8t0tsnPoDYIkIH1OajS3SgMR-NaB8o-6BhcB7Ni0,685
|
|
69
|
+
pdflinkcheck/data/themes/forest/forest-dark/radio-accent.png,sha256=3B6pKIr1W1ROeifzw65p_b8rgIXftKdJgqOUh3zt_9g,565
|
|
70
|
+
pdflinkcheck/data/themes/forest/forest-dark/radio-basic.png,sha256=eG3-kmfppNe-rlEEol4TTPDG8x7gML2v8Ofgy_Odyqg,543
|
|
71
|
+
pdflinkcheck/data/themes/forest/forest-dark/radio-hover.png,sha256=fYwM7nb8hXovpDF58cdDPEc-cAo8erH8nsYN4_iev9o,579
|
|
72
|
+
pdflinkcheck/data/themes/forest/forest-dark/radio-tri-accent.png,sha256=QOz4cS763L08W82v9MqYemdkYEVE2D00j5Hoxu79Esw,465
|
|
73
|
+
pdflinkcheck/data/themes/forest/forest-dark/radio-tri-basic.png,sha256=vmRAQVMj9X8WKYpx3e9xEIPBrtTcCAX5sk4Q0silujs,450
|
|
74
|
+
pdflinkcheck/data/themes/forest/forest-dark/radio-tri-hover.png,sha256=uETadf2n03ToeLbUKC-22owzei4EuoX20cGCwCeZQJw,489
|
|
75
|
+
pdflinkcheck/data/themes/forest/forest-dark/radio-unsel-accent.png,sha256=BrmdahTSZjAi5WdFs56Zcc2pkGJM7j2DEl2bei8_qaA,605
|
|
76
|
+
pdflinkcheck/data/themes/forest/forest-dark/radio-unsel-basic.png,sha256=JkJFOykANfzl5t327tYVB2ERSD_mDf2X8pOu5jjqgso,559
|
|
77
|
+
pdflinkcheck/data/themes/forest/forest-dark/radio-unsel-hover.png,sha256=uRTycnLxYyJGxEtljpPwjscIMZG_-uhCdyBCsy4O-G8,615
|
|
78
|
+
pdflinkcheck/data/themes/forest/forest-dark/radio-unsel-pressed.png,sha256=FLOGh60Aa45GXpOR4Y0QVdsFAaSQO42jO5g_9usEytM,468
|
|
79
|
+
pdflinkcheck/data/themes/forest/forest-dark/rect-accent-hover.png,sha256=NJmygtixFXqXQaIYg_ToRmMoR1T74lGr24QU_ZAexPg,290
|
|
80
|
+
pdflinkcheck/data/themes/forest/forest-dark/rect-accent.png,sha256=-QKhPamOtQ-G1cRHkLRUFjWShW-PQHBGXyTT0Lo0a2g,290
|
|
81
|
+
pdflinkcheck/data/themes/forest/forest-dark/rect-basic.png,sha256=erCpZxB1NeuCbvPamSdcXHgOm4Q-vXEpAnQqxVYx3fM,272
|
|
82
|
+
pdflinkcheck/data/themes/forest/forest-dark/rect-hover.png,sha256=OWRVCGRw-TkbvyeBdV25yJU8lF0eakTqKhAD4Cw50m4,273
|
|
83
|
+
pdflinkcheck/data/themes/forest/forest-dark/right.png,sha256=gGeBhrcz5eDKbp4JF_sI2nV_Z2JH0KpROC0pvE9gwPQ,217
|
|
84
|
+
pdflinkcheck/data/themes/forest/forest-dark/scale-hor.png,sha256=ZWsYQZgMz9tLMyPIutuFtCC7Lw91-Tizh-0ojvQaIAQ,166
|
|
85
|
+
pdflinkcheck/data/themes/forest/forest-dark/scale-vert.png,sha256=C36O8NzM8M2ijOdXRge7yJNJuCWR98QV3h-Sm-gICRA,161
|
|
86
|
+
pdflinkcheck/data/themes/forest/forest-dark/separator.png,sha256=xnkU5obW-GsOmDEyxAUunMatyAWBk_-gCKHvf_gJDDg,128
|
|
87
|
+
pdflinkcheck/data/themes/forest/forest-dark/sizegrip.png,sha256=KK1Wo5pq9KglRswwV0R927TksZBMoIbW4YC3-DFjxx4,459
|
|
88
|
+
pdflinkcheck/data/themes/forest/forest-dark/spin-button-down-basic.png,sha256=PB5BLEMb4lEkUAIyA2Z7ZtFe86YubxbwdLgHiizWe_4,153
|
|
89
|
+
pdflinkcheck/data/themes/forest/forest-dark/spin-button-down-focus.png,sha256=L1evCav2J8rTETD1sNjnfio9PNnAq8fuue8mrol936Q,160
|
|
90
|
+
pdflinkcheck/data/themes/forest/forest-dark/spin-button-up.png,sha256=cbq5WDG_D7loJqjN39kuRUw1drOF2GJW6c7un_hyoRI,222
|
|
91
|
+
pdflinkcheck/data/themes/forest/forest-dark/tab-accent.png,sha256=1TwbrCTWEvpvU02nJeAsq0lL1FwBtGH8yP86h9xvriE,188
|
|
92
|
+
pdflinkcheck/data/themes/forest/forest-dark/tab-basic.png,sha256=tCT68xUQVv-gcJWjPyqo1yWGE8RlsHlxJWNnB2oEZGE,188
|
|
93
|
+
pdflinkcheck/data/themes/forest/forest-dark/tab-hover.png,sha256=NkAC9HSqxoZVWCQQhpAhJ8in_8XXXy1fJ-m7v_yOqXc,188
|
|
94
|
+
pdflinkcheck/data/themes/forest/forest-dark/thumb-hor-accent.png,sha256=n1KRtE4xqrSzot2m-MAYNv8FAU2dHo9JhMYpeDpyoMs,270
|
|
95
|
+
pdflinkcheck/data/themes/forest/forest-dark/thumb-hor-basic.png,sha256=i7hrtjtR-BKuUMXfXnbV-PdZ32y_r9j-VCRLERURrk0,258
|
|
96
|
+
pdflinkcheck/data/themes/forest/forest-dark/thumb-hor-hover.png,sha256=hN5ALMtBjg9iO72yipf_04JAQDgD4oG_nnrNalrZm0g,273
|
|
97
|
+
pdflinkcheck/data/themes/forest/forest-dark/thumb-vert-accent.png,sha256=KxsFFhjYn8EAI0vDZx5-rRqlu3JtbfzrTAV1vybHD3s,269
|
|
98
|
+
pdflinkcheck/data/themes/forest/forest-dark/thumb-vert-basic.png,sha256=LQmPj4SL4HKumkgo20tgQjoJL_W2uqHCbmVA410wPbc,253
|
|
99
|
+
pdflinkcheck/data/themes/forest/forest-dark/thumb-vert-hover.png,sha256=6J4hVL28_M0K-1_vMAEHMJ8jM0Uno_71KLF39zo_dDg,269
|
|
100
|
+
pdflinkcheck/data/themes/forest/forest-dark/tree-basic.png,sha256=lvgoAIKAcdMMElVs8OSNEGvZ0qwZOXOiTgo-awPcM2g,149
|
|
101
|
+
pdflinkcheck/data/themes/forest/forest-dark/tree-pressed.png,sha256=2niAWEhH2OACJLClTlfSF8Hdh6w2372LAeOkliIhvts,171
|
|
102
|
+
pdflinkcheck/data/themes/forest/forest-dark/up.png,sha256=rYXTZXXxHpLqrnKV_PLukfROlp_7915cVMidGTCAs9k,250
|
|
103
|
+
pdflinkcheck/data/themes/forest/forest-dark/vert-accent.png,sha256=ByAmCAafDeylS7_FHpqX9DZ4ZFnPO-TqUl9Mh0fCPmc,158
|
|
104
|
+
pdflinkcheck/data/themes/forest/forest-dark/vert-basic.png,sha256=-oOfurWXJNN7TSy_VEu6t-o9IMojg-1gmyGYjOk-Rwg,158
|
|
105
|
+
pdflinkcheck/data/themes/forest/forest-dark/vert-hover.png,sha256=ran_87NoN4U9dSLXft-cO6XyKnP2whAgqUj7E6N4DKk,158
|
|
106
|
+
pdflinkcheck/data/themes/forest/forest-light/border-accent-hover.png,sha256=G1F4TVltT88-xdqJgvek_v0QZ_RCNFJsI0hJgx5DvcA,445
|
|
107
|
+
pdflinkcheck/data/themes/forest/forest-light/border-accent.png,sha256=b-r7W6ipGGzWCG_sZHyuoxZeLA7iLY5NAqNR2zEdF7M,463
|
|
108
|
+
pdflinkcheck/data/themes/forest/forest-light/border-basic.png,sha256=aKludTEo35p98yt77J5vVhh4qy8QXPEipgz3a75Pwzw,311
|
|
109
|
+
pdflinkcheck/data/themes/forest/forest-light/border-hover.png,sha256=tgNxgjTd91Jw4S4YBCywhko1jtPzOKWSSTHQ06NSzUE,324
|
|
110
|
+
pdflinkcheck/data/themes/forest/forest-light/border-invalid.png,sha256=lL5pH3QpOqLmWHVHaCLXwBt4vLwaaAR-Awgh7_1HL80,444
|
|
111
|
+
pdflinkcheck/data/themes/forest/forest-light/card.png,sha256=uA1xqjcmSyokZaFSlghW9kJ1Na9PIlzXDAC2FdOvrzU,353
|
|
112
|
+
pdflinkcheck/data/themes/forest/forest-light/check-accent.png,sha256=1SOhuFzGKxLpiBuCuIc6txrCCNumDRzIUj041G5g-jw,526
|
|
113
|
+
pdflinkcheck/data/themes/forest/forest-light/check-basic.png,sha256=s_pc6gJR7LtFIz6EIypnuqyrYr7E9sHBsMDKDzhUnHs,390
|
|
114
|
+
pdflinkcheck/data/themes/forest/forest-light/check-hover.png,sha256=36XFEo0IA_v4JlJ4GdP1jhHeDT49u2KVHj6PqFV3jlY,531
|
|
115
|
+
pdflinkcheck/data/themes/forest/forest-light/check-tri-accent.png,sha256=y7q_WEjd-Hs2WP1Q3b4-nH8gxRbkEDTanv2GLm0Livo,358
|
|
116
|
+
pdflinkcheck/data/themes/forest/forest-light/check-tri-basic.png,sha256=ce5jJgYV7AG-8dmYwg_jq_deBDGeoQ8xv2ZCXDYQ1Os,281
|
|
117
|
+
pdflinkcheck/data/themes/forest/forest-light/check-tri-hover.png,sha256=_0A12dacFK87Wiuwrn8s_CU3deYcz5P5hgryVsjfH0E,358
|
|
118
|
+
pdflinkcheck/data/themes/forest/forest-light/check-unsel-accent.png,sha256=KGTyT9Smf8Y6oU608Xy5XigqAuftjDBSevHqTkUMd8c,403
|
|
119
|
+
pdflinkcheck/data/themes/forest/forest-light/check-unsel-basic.png,sha256=aKludTEo35p98yt77J5vVhh4qy8QXPEipgz3a75Pwzw,311
|
|
120
|
+
pdflinkcheck/data/themes/forest/forest-light/check-unsel-hover.png,sha256=5qBA26jDUHpuLYcuOFx1SLaqeu1ixgzaDnF4MJ63-pI,398
|
|
121
|
+
pdflinkcheck/data/themes/forest/forest-light/check-unsel-pressed.png,sha256=XFCVCrwZ2w9KIBS-3YMXgAGCHrKtTt2xkAZnTkgRTOw,335
|
|
122
|
+
pdflinkcheck/data/themes/forest/forest-light/combo-button-basic.png,sha256=NhQlwCplxVnHb8tws5Ix_jPmdYOwPGEZnxuatWWCIKU,247
|
|
123
|
+
pdflinkcheck/data/themes/forest/forest-light/combo-button-focus.png,sha256=oh9jLyGpzPI1Pp-Uq8wbC6GHSiSG2DuCUkPcgl6yb0E,260
|
|
124
|
+
pdflinkcheck/data/themes/forest/forest-light/combo-button-hover.png,sha256=xbiPPr84hu7ZiJ4ASV3FXBQXQNJXoMZ-dieXGR-aHyk,244
|
|
125
|
+
pdflinkcheck/data/themes/forest/forest-light/down-focus.png,sha256=Jm3YQJyWIfjZWbkljJTI-K4bBqWyxMhSK39qciWDREE,200
|
|
126
|
+
pdflinkcheck/data/themes/forest/forest-light/down.png,sha256=UkvgLbxe3Nuhx9_SEY8cVnMMHv7XOPW-wwGS-pxPfE8,266
|
|
127
|
+
pdflinkcheck/data/themes/forest/forest-light/empty.png,sha256=aAISBZoamEUCCxwm-XVLjE0iquAVx-7ORJMm5_nvwRc,130
|
|
128
|
+
pdflinkcheck/data/themes/forest/forest-light/hor-accent.png,sha256=Ahtvg4IlmxdB91m7HUspdyGKZYVDMzWkXW7l4ROfsBY,154
|
|
129
|
+
pdflinkcheck/data/themes/forest/forest-light/hor-basic.png,sha256=X63fOcJKBw8huFz_y6jzvMdeBPr7R6WDLc55ENgJnNs,157
|
|
130
|
+
pdflinkcheck/data/themes/forest/forest-light/hor-hover.png,sha256=vdph5xYWH0DMcS4k5uIRWgLAqJwg42qF3c4cfJ5GhgE,154
|
|
131
|
+
pdflinkcheck/data/themes/forest/forest-light/notebook.png,sha256=0v-LOJI86uDrNegHqP2ew-BG2A21t_OQa4LitvWaEFw,190
|
|
132
|
+
pdflinkcheck/data/themes/forest/forest-light/off-accent.png,sha256=YJqvTlC9x9hjUnNIkOEd-SNtzDUwo3tLUcj3aXFxPRw,765
|
|
133
|
+
pdflinkcheck/data/themes/forest/forest-light/off-basic.png,sha256=D03BVzXLZ5EcRY2Pq092_yKJVYRBi-_ouR7329-Am8Q,547
|
|
134
|
+
pdflinkcheck/data/themes/forest/forest-light/off-hover.png,sha256=G9vgbqJnysNqu2u1ch59t9MUNU-MB6RogdMhkf0weO4,771
|
|
135
|
+
pdflinkcheck/data/themes/forest/forest-light/on-accent.png,sha256=G3y-ZWOLFgW2eDFi7HQpM_g37dmtGa6SmEcdPV7x4Os,754
|
|
136
|
+
pdflinkcheck/data/themes/forest/forest-light/on-basic.png,sha256=sFWqOifw-lPD91uP5-fLvfrLGfb7XbIQmgoPLn1HTj8,538
|
|
137
|
+
pdflinkcheck/data/themes/forest/forest-light/on-hover.png,sha256=EmpTAuprnkRjR7Fah07HdvdmTbtwBsDAUjE19W98qEI,764
|
|
138
|
+
pdflinkcheck/data/themes/forest/forest-light/radio-accent.png,sha256=88LGsUOYDCyrOLuQTwOQKBCT9PueX5zY-TkX9QLDLsw,674
|
|
139
|
+
pdflinkcheck/data/themes/forest/forest-light/radio-basic.png,sha256=RB63qZ1RnnsSAnhaGQlp8SzkxQdnu0vLGXyGVqH4nOg,486
|
|
140
|
+
pdflinkcheck/data/themes/forest/forest-light/radio-hover.png,sha256=xY02oGSulbGasaF8zBxyNaXUHGcZYs_1l8ZuSPNA-tg,679
|
|
141
|
+
pdflinkcheck/data/themes/forest/forest-light/radio-tri-accent.png,sha256=aZwlBpHwnn-1-6yZhNl7ksLZyGqzmg5rJs-NO4Q-TZ0,549
|
|
142
|
+
pdflinkcheck/data/themes/forest/forest-light/radio-tri-basic.png,sha256=CGPZorvPlrihFF4PA3pqnS5ok4NsGwA56SJbZ4ssyPs,390
|
|
143
|
+
pdflinkcheck/data/themes/forest/forest-light/radio-tri-hover.png,sha256=jcs_MdoZlbSJS23vBibuySgjziaqJJgQfAJy3zVphhQ,550
|
|
144
|
+
pdflinkcheck/data/themes/forest/forest-light/radio-unsel-accent.png,sha256=skljAMQcMV6_r2_BLLwqrIJLcD_oUS3JXOF-RbCC4lU,676
|
|
145
|
+
pdflinkcheck/data/themes/forest/forest-light/radio-unsel-basic.png,sha256=ZuF3R6frYCFfiqlRgliSXEyHPYQ_p_ageLt6N9FmN_0,504
|
|
146
|
+
pdflinkcheck/data/themes/forest/forest-light/radio-unsel-hover.png,sha256=UOEAxqp8k7HpUatgzto1uU3hb-NeR24PaI8JMRn6fUM,674
|
|
147
|
+
pdflinkcheck/data/themes/forest/forest-light/radio-unsel-pressed.png,sha256=u0R7DytIw1xzH6XPiol7XAI6UJPCvvgqFk8_9m4lxec,512
|
|
148
|
+
pdflinkcheck/data/themes/forest/forest-light/rect-accent-hover.png,sha256=XFCVCrwZ2w9KIBS-3YMXgAGCHrKtTt2xkAZnTkgRTOw,335
|
|
149
|
+
pdflinkcheck/data/themes/forest/forest-light/rect-accent.png,sha256=5z1HUtlEKTJmboVjyzdjneUBdL9yAdSA66rn0ZWZfdk,335
|
|
150
|
+
pdflinkcheck/data/themes/forest/forest-light/rect-basic.png,sha256=P7KEkUfUgjq61CxrM9YkwQaV9V6en_YUnED4KHojLDg,254
|
|
151
|
+
pdflinkcheck/data/themes/forest/forest-light/rect-hover.png,sha256=fVtJuiKsvdS_lcyT6ko0ornJyEFkE1FPcQoidr3JT0Q,272
|
|
152
|
+
pdflinkcheck/data/themes/forest/forest-light/right-focus.png,sha256=rwmK_20UP39GStTNFWPQVCnUDtrzxNjKi_Lb_PlBeDE,190
|
|
153
|
+
pdflinkcheck/data/themes/forest/forest-light/right.png,sha256=kMTXyH8kER_DqsAmx3GpH_1_bZL1fUKn69Nk93zR7Ys,284
|
|
154
|
+
pdflinkcheck/data/themes/forest/forest-light/scale-hor.png,sha256=E-XWMNU2jNqsTXcI442GGijNC0UvOF1zwTI30Yv6eAk,161
|
|
155
|
+
pdflinkcheck/data/themes/forest/forest-light/scale-vert.png,sha256=3kU2kZq_od93REwviNY_9nfovxwXBrHN6U-HXi0f-N4,162
|
|
156
|
+
pdflinkcheck/data/themes/forest/forest-light/separator.png,sha256=GIvc6YmJktvRcMmyQ3d-I6jPw4A3nDaDgNdLs5Oew9Y,128
|
|
157
|
+
pdflinkcheck/data/themes/forest/forest-light/sizegrip.png,sha256=bCzw55917nv47E6IPkZQTdRsqS2le7AFDBhJjtYw37A,471
|
|
158
|
+
pdflinkcheck/data/themes/forest/forest-light/spin-button-down-basic.png,sha256=-mdupa0cKCp841AkTF8ZLegFn0yVhOwxJ1pYsFke4YI,156
|
|
159
|
+
pdflinkcheck/data/themes/forest/forest-light/spin-button-down-focus.png,sha256=Ulm2AAhXCRH91r2zMxYmrKDcPFMoJjogoVElVTTa5Jw,163
|
|
160
|
+
pdflinkcheck/data/themes/forest/forest-light/spin-button-up.png,sha256=9BqiNmwhOBQxLUk3_z-fSYDoJwvb_fHcZ62vQEVC2hk,223
|
|
161
|
+
pdflinkcheck/data/themes/forest/forest-light/tab-accent.png,sha256=WZfG7ejt26QqgjGL3mbE1xHwvQqq6cPfdJ3-L-q9-Ro,184
|
|
162
|
+
pdflinkcheck/data/themes/forest/forest-light/tab-basic.png,sha256=1ckMXRBNCo6v_QGAOeKmnY90aDYDqXM8joajeYXqF38,183
|
|
163
|
+
pdflinkcheck/data/themes/forest/forest-light/tab-hover.png,sha256=xWcSyuCRSgnwsjoC68_KcX84_B53IHsgaJpdYq02kcI,184
|
|
164
|
+
pdflinkcheck/data/themes/forest/forest-light/thumb-hor-accent.png,sha256=IHrz8xqmxa0VfXE55lSjHj8B1NUGbQsUO6CQII4k8-M,316
|
|
165
|
+
pdflinkcheck/data/themes/forest/forest-light/thumb-hor-basic.png,sha256=FeibX0i_weUuw4qQlIg_vesSLt-YostwyJkIOeW3Ebk,242
|
|
166
|
+
pdflinkcheck/data/themes/forest/forest-light/thumb-hor-hover.png,sha256=hkYHxtviL9T8bLvtUvleeg8ggU02ko7PQ4XQPBGT6tA,316
|
|
167
|
+
pdflinkcheck/data/themes/forest/forest-light/thumb-vert-accent.png,sha256=cCRo8uU8Kz22x86oyE_pldVM-iUmHdZmyNJh3rpE91s,311
|
|
168
|
+
pdflinkcheck/data/themes/forest/forest-light/thumb-vert-basic.png,sha256=4SaeJeN4bWW198uxvo3ShG4lxUmXqrio7XGR62MVAGs,234
|
|
169
|
+
pdflinkcheck/data/themes/forest/forest-light/thumb-vert-hover.png,sha256=ExvieNh-UXIbjVTbRMxHNKd7bViwp2pzbLx7YNx8DtM,310
|
|
170
|
+
pdflinkcheck/data/themes/forest/forest-light/tree-basic.png,sha256=R8WngTzTDAWNqkfh-RhsdGkjnYkie5V1LioHttSUwUI,149
|
|
171
|
+
pdflinkcheck/data/themes/forest/forest-light/tree-pressed.png,sha256=Q0-OVBVYuJw00hBWXiNb8SxTcChsHgnGvRtWf3SToNo,168
|
|
172
|
+
pdflinkcheck/data/themes/forest/forest-light/up.png,sha256=qNsplPHruJhHV0mJDaomkfPaM0xEP3CfU3df_yL9wro,278
|
|
173
|
+
pdflinkcheck/data/themes/forest/forest-light/vert-accent.png,sha256=Eyj8nUQHnEzxNVFhMv7FH_Ezn9pOt2Xe0-Aquh8_9YY,158
|
|
174
|
+
pdflinkcheck/data/themes/forest/forest-light/vert-basic.png,sha256=tx9KswFqH_-ImUrm2M8cIjsBQKGupa2SJqjVjHCi9LM,158
|
|
175
|
+
pdflinkcheck/data/themes/forest/forest-light/vert-hover.png,sha256=BjEilGWGjr0ulvCfmFiBmS-8Dr1jSQjt4CUkxS1e2h4,158
|
|
176
|
+
pdflinkcheck-1.2.29.dist-info/licenses/LICENSE,sha256=npi0VqlkL0AlE0FsGEIOXxMqXlmH4toZfBHesJpP0lA,1866
|
|
177
|
+
pdflinkcheck-1.2.29.dist-info/licenses/LICENSE-AGPL3,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
|
|
178
|
+
pdflinkcheck-1.2.29.dist-info/licenses/LICENSE-MIT,sha256=hNjSMpr8jpZQzBj9tHKafry8bW1kfLnl-DxiSfw7Lyw,1127
|
|
179
|
+
pdflinkcheck-1.2.29.dist-info/METADATA,sha256=37Kicn3cP9WUYoBnudSyIVytLqfsXAD2UZph9Qhol7M,13317
|
|
180
|
+
pdflinkcheck-1.2.29.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
181
|
+
pdflinkcheck-1.2.29.dist-info/entry_points.txt,sha256=cZaB_inIfr2X9lxMo1RhZr4602F3nTjTm3cXquzfw3Q,54
|
|
182
|
+
pdflinkcheck-1.2.29.dist-info/top_level.txt,sha256=WdBg8l6l3TF1HQDpR_PwSmBCSu5atKWFnPfNbRNwrME,13
|
|
183
|
+
pdflinkcheck-1.2.29.dist-info/RECORD,,
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
Some distributed binaries of this project include the PyMuPDF library, which is licensed under **AGPL3.0orlater**.
|
|
2
|
+
Any binary that incorporates PyMuPDF is therefore distributed under **AGPL3.0orlater**.
|
|
3
|
+
Other binaries use only the `pypdf` library and do not include PyMuPDF; these binaries are distributed under the **MIT License**.
|
|
4
|
+
|
|
5
|
+
For AGPLlicensed binaries, the complete corresponding source code must be made available to anyone who possesses a copy, upon request.
|
|
6
|
+
This obligation applies only to recipients of those binaries, and hosting the source code in GitHub Releases satisfies this requirement.
|
|
7
|
+
|
|
8
|
+
A binary becomes AGPLlicensed only when built with the optional `"full"` dependency group (as defined in `pyproject.toml` under `[project.optional-dependencies]`) or when PyMuPDF is otherwise included in the build environment.
|
|
9
|
+
The **source code of pdflinkcheck itself** remains licensed under the **MIT License**; only the distributed binary becomes AGPLlicensed when PyMuPDF is included.
|
|
10
|
+
|
|
11
|
+
Source code for each released version is available in the `pdflinkcheckVERSION.tar.gz` files on the projects GitHub Releases page.
|
|
12
|
+
|
|
13
|
+
Fulltext copies of **LICENSEMIT** and **LICENSEAGPL3** are included in the root of the repository.
|
|
14
|
+
|
|
15
|
+
**Links:**
|
|
16
|
+
- Project source code: https://github.com/City-of-Memphis-Wastewater/pdflinkcheck
|
|
17
|
+
- PyMuPDF source code: https://github.com/pymupdf/PyMuPDF
|
|
18
|
+
- pypdfium2 source code: https://github.com/pypdfium2-team/pypdfium2
|
|
19
|
+
- PDFium source code: https://pdfium.googlesource.com/pdfium/
|
|
20
|
+
- pypdf source code: https://github.com/py-pdf/pypdf
|
|
21
|
+
- AGPLv3 text (FSF): https://www.gnu.org/licenses/agpl-3.0.html
|
|
22
|
+
- MIT License text: https://opensource.org/license/mit
|
|
23
|
+
- BSD-3 License text: https://opensource.org/license/bsd-3-clause
|
|
24
|
+
- Apache-v2 License text: https://opensource.org/license/apache-2-0
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
Copyright 2025 George Clayton Bennett
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
MIT
|
|
2
|
+
|
|
3
|
+
Copyright © 2025 George Clayton Bennett <https://github.com/City-of-Memphis-Wastewater/>
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
6
|
+
|
|
7
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
8
|
+
|
|
9
|
+
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
pdflinkcheck
|