diff --git a/.pylintrc b/.pylintrc new file mode 100644 index 0000000..1483bc8 --- /dev/null +++ b/.pylintrc @@ -0,0 +1,3 @@ +[MASTER] + +good-names=logger, diff --git a/pdflayers.py b/pdflayers/__main__.py similarity index 60% rename from pdflayers.py rename to pdflayers/__main__.py index 6c6071a..41bb454 100644 --- a/pdflayers.py +++ b/pdflayers/__main__.py @@ -12,44 +12,12 @@ References: """ import argparse import logging -import sys import pikepdf +from pdflayers import utils -def set_layer_visibility(pdf, layers_to_show): - """Set visibility of layers.""" - try: - ocgs = pdf.root.OCProperties.OCGs - except (AttributeError, KeyError): - logging.error("Unable to locate layers in PDF.") - sys.exit(1) - - ocgs_on = [] - for ocg in ocgs: - if ocg.Name in layers_to_show: - logging.info("Layer %s will be visible.", ocg.Name) - ocgs_on.append(ocg) - else: - logging.info("Layer %s will be hidden.", ocg.Name) - - ocgs_config = pikepdf.Dictionary( - BaseState=pikepdf.Name('/OFF'), - ON=ocgs_on, - Order=ocgs, - ) - - pdf.root.OCProperties = pikepdf.Dictionary( - D=ocgs_config, - OCGs=ocgs, - ) - - # Needed for google-chrome (at least): - for ocg in ocgs: - if '/View' in ocg.Usage: - del ocg.Usage.View - if '/Print' in ocg.Usage: - del ocg.Usage.Print +logger = logging.getLogger(__name__) def main(): @@ -72,7 +40,7 @@ def main(): pdf = pikepdf.open(args.input, password=args.password) - set_layer_visibility(pdf, args.show) + utils.set_layer_visibility(pdf, args.show) pdf.remove_unreferenced_resources() save_options = { diff --git a/pdflayers/utils.py b/pdflayers/utils.py new file mode 100644 index 0000000..ac41edd --- /dev/null +++ b/pdflayers/utils.py @@ -0,0 +1,42 @@ +"""Utility functions used in pdflayers.""" +import logging +import sys + +import pikepdf + +logger = logging.getLogger(__name__) + + +def set_layer_visibility(pdf, layers_to_show): + """Set visibility of layers.""" + try: + ocgs = pdf.root.OCProperties.OCGs + except (AttributeError, KeyError): + logger.error("Unable to locate layers in PDF.") + sys.exit(1) + + ocgs_on = [] + for ocg in ocgs: + if ocg.Name in layers_to_show: + logger.info("Layer %s will be visible.", ocg.Name) + ocgs_on.append(ocg) + else: + logger.info("Layer %s will be hidden.", ocg.Name) + + ocgs_config = pikepdf.Dictionary( + BaseState=pikepdf.Name('/OFF'), + ON=ocgs_on, + Order=ocgs, + ) + + pdf.root.OCProperties = pikepdf.Dictionary( + D=ocgs_config, + OCGs=ocgs, + ) + + # Needed for google-chrome (at least): + for ocg in ocgs: + if '/View' in ocg.Usage: + del ocg.Usage.View + if '/Print' in ocg.Usage: + del ocg.Usage.Print diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..d517b7b --- /dev/null +++ b/setup.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python3 +"""Setup.""" +import setuptools + + +def _readme(): + with open('README.md', 'r') as file: + return file.read() + + +setuptools.setup( + name='pdflayers', + version='0.1.0', + author='Simon Segerblom Rex', + description='PDF layer handling.', + long_description=_readme(), + long_description_content_type='text/markdown', + url='https://github.com/SimonSegerblomRex/pdflayers', + license='MIT', + packages=setuptools.find_packages(), + entry_points={ + 'console_scripts': [ + 'pdflayers = pdflayers.__main__:main', + ], + }, + python_requires='>=3.5', + install_requires=[ + 'pikepdf', + ], + classifiers=[ + 'Python :: 3' + ], +)