pdflayers/pdflayers/utils.py

43 lines
1.0 KiB
Python

"""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