This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # SPDX-FileCopyrightText: 2024 geisserml <geisserml@gmail.com> | |
| # SPDX-License-Identifier: Apache-2.0 OR BSD-3-Clause OR MPL-2.0 | |
| import sys | |
| import importlib.util | |
| def v1_deferred_import(modpath): | |
| # FIXME If modpath points to a submodule (e.g. PIL.Image), the parent module will be loaded immediately when this function is called. What's more, non-deferred imports of the submodule will break. This seems to be a nasty limitation of the importlib APIs used here. | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # SPDX-FileCopyrightText: 2024 geisserml <geisserml@gmail.com> | |
| # SPDX-FileCopyrightText: 2024 James R. Barlow <james@purplerock.ca> | |
| # SPDX-License-Identifier: MPL-2.0 | |
| # Initial code derived from ocrmypdf/_exec/ghostscript.py | |
| # Note that Ghostscript is AGPL-licensed. However, we are calling it via subprocess here, so not sure whether copyleft would actually apply. | |
| # See also https://www.gnu.org/licenses/gpl-faq.en.html#MereAggregation | |
| import io | |
| import os |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # SPDX-FileCopyrightText: 2024 geisserml <geisserml@gmail.com> | |
| # SPDX-License-Identifier: MPL-2.0 | |
| # Note that (py)mupdf is AGPL-licensed, so this code is altogether affected by copyleft | |
| import PIL.Image | |
| import fitz as pymupdf | |
| def invoke_pymupdf(filepath, index, scale=4, rotation=0, password=None): |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # SPDX-FileCopyrightText: 2024 geisserml <geisserml@gmail.com> | |
| # SPDX-License-Identifier: MPL-2.0 | |
| # Note that Poppler is GPL-licensed, so this code is altogether affected by copyleft | |
| import io | |
| import PIL.Image | |
| from popplerqt5 import Poppler | |
| from PyQt5.QtCore import QByteArray, QBuffer | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # SPDX-FileCopyrightText: 2024 geisserml <geisserml@gmail.com> | |
| # SPDX-License-Identifier: MPL-2.0 | |
| # Note that Poppler is GPL-licensed, so this code is altogether affected by copyleft | |
| import PIL.Image | |
| import poppler # python-poppler | |
| from poppler.cpp.page_renderer import render_hint | |
| def _translate_rotation(rotation): |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # SPDX-FileCopyrightText: 2024 geisserml <geisserml@gmail.com> | |
| # SPDX-License-Identifier: MPL-2.0 | |
| # Note that Poppler is GPL-licensed, so this code is altogether affected by copyleft | |
| import math | |
| from pathlib import Path | |
| import PIL.Image | |
| import cairo | |
| import gi |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Four lines intentionally left blank | |
| # SPDX-FileCopyrightText: 2025 geisserml <geisserml@gmail.com> | |
| # SPDX-License-Identifier: MPL-2.0 | |
| # Sophisticated parser for a page number mini-language | |
| # Technically, this might be a use case for some parser generator like pyparsing or PLY, but this is a manual implementation based on common string operations. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # SPDX-FileCopyrightText: 2024 geisserml <geisserml@gmail.com> | |
| # SPDX-License-Identifier: Apache-2.0 OR BSD-3-Clause | |
| import sys | |
| import argparse | |
| if sys.version_info >= (3, 9): | |
| from argparse import BooleanOptionalAction | |
| else: |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Four lines intentionally left blank | |
| # SPDX-FileCopyrightText: 2025 geisserml <geisserml@gmail.com> | |
| # SPDX-License-Identifier: Apache-2.0 OR BSD-3-Clause | |
| import argparse | |
| from pathlib import Path |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # SPDX-FileCopyrightText: 2023 geisserml <geisserml@gmail.com> | |
| # SPDX-License-Identifier: CC-BY-4.0 OR Apache-2.0 OR BSD-3-Clause | |
| # Unlike repository files, there is no "raw view" for GH releases, but we can extract the plain markdown content using GH web API | |
| # See also https://stackoverflow.com/q/76995969/15547292 | |
| # The following code snippet shows how to get a release title from pdfium-binaries to extract the full version | |
| import re | |
| import json |