aboutsummaryrefslogtreecommitdiff
path: root/.venv/lib/python3.12/site-packages/PyPDF2/constants.py
diff options
context:
space:
mode:
Diffstat (limited to '.venv/lib/python3.12/site-packages/PyPDF2/constants.py')
-rw-r--r--.venv/lib/python3.12/site-packages/PyPDF2/constants.py461
1 files changed, 461 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/PyPDF2/constants.py b/.venv/lib/python3.12/site-packages/PyPDF2/constants.py
new file mode 100644
index 00000000..a2f8c49e
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/PyPDF2/constants.py
@@ -0,0 +1,461 @@
+"""
+See Portable Document Format Reference Manual, 1993. ISBN 0-201-62628-4.
+
+See https://ia802202.us.archive.org/8/items/pdfy-0vt8s-egqFwDl7L2/PDF%20Reference%201.0.pdf
+
+PDF Reference, third edition, Version 1.4, 2001. ISBN 0-201-75839-3.
+
+PDF Reference, sixth edition, Version 1.7, 2006.
+"""
+
+from enum import IntFlag
+from typing import Dict, Tuple
+
+
+class Core:
+ """Keywords that don't quite belong anywhere else."""
+
+ OUTLINES = "/Outlines"
+ THREADS = "/Threads"
+ PAGE = "/Page"
+ PAGES = "/Pages"
+ CATALOG = "/Catalog"
+
+
+class TrailerKeys:
+ ROOT = "/Root"
+ ENCRYPT = "/Encrypt"
+ ID = "/ID"
+ INFO = "/Info"
+ SIZE = "/Size"
+
+
+class CatalogAttributes:
+ NAMES = "/Names"
+ DESTS = "/Dests"
+
+
+class EncryptionDictAttributes:
+ """
+ Additional encryption dictionary entries for the standard security handler.
+
+ TABLE 3.19, Page 122
+ """
+
+ R = "/R" # number, required; revision of the standard security handler
+ O = "/O" # 32-byte string, required
+ U = "/U" # 32-byte string, required
+ P = "/P" # integer flag, required; permitted operations
+ ENCRYPT_METADATA = "/EncryptMetadata" # boolean flag, optional
+
+
+class UserAccessPermissions(IntFlag):
+ """TABLE 3.20 User access permissions"""
+
+ R1 = 1
+ R2 = 2
+ PRINT = 4
+ MODIFY = 8
+ EXTRACT = 16
+ ADD_OR_MODIFY = 32
+ R7 = 64
+ R8 = 128
+ FILL_FORM_FIELDS = 256
+ EXTRACT_TEXT_AND_GRAPHICS = 512
+ ASSEMBLE_DOC = 1024
+ PRINT_TO_REPRESENTATION = 2048
+ R13 = 2**12
+ R14 = 2**13
+ R15 = 2**14
+ R16 = 2**15
+ R17 = 2**16
+ R18 = 2**17
+ R19 = 2**18
+ R20 = 2**19
+ R21 = 2**20
+ R22 = 2**21
+ R23 = 2**22
+ R24 = 2**23
+ R25 = 2**24
+ R26 = 2**25
+ R27 = 2**26
+ R28 = 2**27
+ R29 = 2**28
+ R30 = 2**29
+ R31 = 2**30
+ R32 = 2**31
+
+
+class Ressources:
+ """TABLE 3.30 Entries in a resource dictionary."""
+
+ EXT_G_STATE = "/ExtGState" # dictionary, optional
+ COLOR_SPACE = "/ColorSpace" # dictionary, optional
+ PATTERN = "/Pattern" # dictionary, optional
+ SHADING = "/Shading" # dictionary, optional
+ XOBJECT = "/XObject" # dictionary, optional
+ FONT = "/Font" # dictionary, optional
+ PROC_SET = "/ProcSet" # array, optional
+ PROPERTIES = "/Properties" # dictionary, optional
+
+
+class PagesAttributes:
+ """Page Attributes, Table 6.2, Page 52."""
+
+ TYPE = "/Type" # name, required; must be /Pages
+ KIDS = "/Kids" # array, required; List of indirect references
+ COUNT = "/Count" # integer, required; the number of all nodes und this node
+ PARENT = "/Parent" # dictionary, required; indirect reference to pages object
+
+
+class PageAttributes:
+ """TABLE 3.27 Entries in a page object."""
+
+ TYPE = "/Type" # name, required; must be /Page
+ PARENT = "/Parent" # dictionary, required; a pages object
+ LAST_MODIFIED = (
+ "/LastModified" # date, optional; date and time of last modification
+ )
+ RESOURCES = "/Resources" # dictionary, required if there are any
+ MEDIABOX = "/MediaBox" # rectangle, required; rectangle specifying page size
+ CROPBOX = "/CropBox" # rectangle, optional; rectangle
+ BLEEDBOX = "/BleedBox" # rectangle, optional; rectangle
+ TRIMBOX = "/TrimBox" # rectangle, optional; rectangle
+ ARTBOX = "/ArtBox" # rectangle, optional; rectangle
+ BOX_COLOR_INFO = "/BoxColorInfo" # dictionary, optional
+ CONTENTS = "/Contents" # stream or array, optional
+ ROTATE = "/Rotate" # integer, optional; page rotation in degrees
+ GROUP = "/Group" # dictionary, optional; page group
+ THUMB = "/Thumb" # stream, optional; indirect reference to image of the page
+ B = "/B" # array, optional
+ DUR = "/Dur" # number, optional
+ TRANS = "/Trans" # dictionary, optional
+ ANNOTS = "/Annots" # array, optional; an array of annotations
+ AA = "/AA" # dictionary, optional
+ METADATA = "/Metadata" # stream, optional
+ PIECE_INFO = "/PieceInfo" # dictionary, optional
+ STRUCT_PARENTS = "/StructParents" # integer, optional
+ ID = "/ID" # byte string, optional
+ PZ = "/PZ" # number, optional
+ TABS = "/Tabs" # name, optional
+ TEMPLATE_INSTANTIATED = "/TemplateInstantiated" # name, optional
+ PRES_STEPS = "/PresSteps" # dictionary, optional
+ USER_UNIT = "/UserUnit" # number, optional
+ VP = "/VP" # dictionary, optional
+
+
+class FileSpecificationDictionaryEntries:
+ """TABLE 3.41 Entries in a file specification dictionary"""
+
+ Type = "/Type"
+ FS = "/FS" # The name of the file system to be used to interpret this file specification
+ F = "/F" # A file specification string of the form described in Section 3.10.1
+ EF = "/EF" # dictionary, containing a subset of the keys F , UF , DOS , Mac , and Unix
+
+
+class StreamAttributes:
+ """Table 4.2."""
+
+ LENGTH = "/Length" # integer, required
+ FILTER = "/Filter" # name or array of names, optional
+ DECODE_PARMS = "/DecodeParms" # variable, optional -- 'decodeParams is wrong
+
+
+class FilterTypes:
+ """
+ Table 4.3 of the 1.4 Manual.
+
+ Page 354 of the 1.7 Manual
+ """
+
+ ASCII_HEX_DECODE = "/ASCIIHexDecode" # abbreviation: AHx
+ ASCII_85_DECODE = "/ASCII85Decode" # abbreviation: A85
+ LZW_DECODE = "/LZWDecode" # abbreviation: LZW
+ FLATE_DECODE = "/FlateDecode" # abbreviation: Fl, PDF 1.2
+ RUN_LENGTH_DECODE = "/RunLengthDecode" # abbreviation: RL
+ CCITT_FAX_DECODE = "/CCITTFaxDecode" # abbreviation: CCF
+ DCT_DECODE = "/DCTDecode" # abbreviation: DCT
+
+
+class FilterTypeAbbreviations:
+ """Table 4.44 of the 1.7 Manual (page 353ff)."""
+
+ AHx = "/AHx"
+ A85 = "/A85"
+ LZW = "/LZW"
+ FL = "/Fl" # FlateDecode
+ RL = "/RL"
+ CCF = "/CCF"
+ DCT = "/DCT"
+
+
+class LzwFilterParameters:
+ """Table 4.4."""
+
+ PREDICTOR = "/Predictor" # integer
+ COLUMNS = "/Columns" # integer
+ COLORS = "/Colors" # integer
+ BITS_PER_COMPONENT = "/BitsPerComponent" # integer
+ EARLY_CHANGE = "/EarlyChange" # integer
+
+
+class CcittFaxDecodeParameters:
+ """Table 4.5."""
+
+ K = "/K" # integer
+ END_OF_LINE = "/EndOfLine" # boolean
+ ENCODED_BYTE_ALIGN = "/EncodedByteAlign" # boolean
+ COLUMNS = "/Columns" # integer
+ ROWS = "/Rows" # integer
+ END_OF_BLOCK = "/EndOfBlock" # boolean
+ BLACK_IS_1 = "/BlackIs1" # boolean
+ DAMAGED_ROWS_BEFORE_ERROR = "/DamagedRowsBeforeError" # integer
+
+
+class ImageAttributes:
+ """Table 6.20."""
+
+ TYPE = "/Type" # name, required; must be /XObject
+ SUBTYPE = "/Subtype" # name, required; must be /Image
+ NAME = "/Name" # name, required
+ WIDTH = "/Width" # integer, required
+ HEIGHT = "/Height" # integer, required
+ BITS_PER_COMPONENT = "/BitsPerComponent" # integer, required
+ COLOR_SPACE = "/ColorSpace" # name, required
+ DECODE = "/Decode" # array, optional
+ INTERPOLATE = "/Interpolate" # boolean, optional
+ IMAGE_MASK = "/ImageMask" # boolean, optional
+
+
+class ColorSpaces:
+ DEVICE_RGB = "/DeviceRGB"
+ DEVICE_CMYK = "/DeviceCMYK"
+ DEVICE_GRAY = "/DeviceGray"
+
+
+class TypArguments:
+ """Table 8.2 of the PDF 1.7 reference."""
+
+ LEFT = "/Left"
+ RIGHT = "/Right"
+ BOTTOM = "/Bottom"
+ TOP = "/Top"
+
+
+class TypFitArguments:
+ """Table 8.2 of the PDF 1.7 reference."""
+
+ FIT = "/Fit"
+ FIT_V = "/FitV"
+ FIT_BV = "/FitBV"
+ FIT_B = "/FitB"
+ FIT_H = "/FitH"
+ FIT_BH = "/FitBH"
+ FIT_R = "/FitR"
+ XYZ = "/XYZ"
+
+
+class GoToActionArguments:
+ S = "/S" # name, required: type of action
+ D = "/D" # name / byte string /array, required: Destination to jump to
+
+
+class AnnotationDictionaryAttributes:
+ """TABLE 8.15 Entries common to all annotation dictionaries"""
+
+ Type = "/Type"
+ Subtype = "/Subtype"
+ Rect = "/Rect"
+ Contents = "/Contents"
+ P = "/P"
+ NM = "/NM"
+ M = "/M"
+ F = "/F"
+ AP = "/AP"
+ AS = "/AS"
+ Border = "/Border"
+ C = "/C"
+ StructParent = "/StructParent"
+ OC = "/OC"
+
+
+class InteractiveFormDictEntries:
+ Fields = "/Fields"
+ NeedAppearances = "/NeedAppearances"
+ SigFlags = "/SigFlags"
+ CO = "/CO"
+ DR = "/DR"
+ DA = "/DA"
+ Q = "/Q"
+ XFA = "/XFA"
+
+
+class FieldDictionaryAttributes:
+ """TABLE 8.69 Entries common to all field dictionaries (PDF 1.7 reference)."""
+
+ FT = "/FT" # name, required for terminal fields
+ Parent = "/Parent" # dictionary, required for children
+ Kids = "/Kids" # array, sometimes required
+ T = "/T" # text string, optional
+ TU = "/TU" # text string, optional
+ TM = "/TM" # text string, optional
+ Ff = "/Ff" # integer, optional
+ V = "/V" # text string, optional
+ DV = "/DV" # text string, optional
+ AA = "/AA" # dictionary, optional
+
+ @classmethod
+ def attributes(cls) -> Tuple[str, ...]:
+ return (
+ cls.TM,
+ cls.T,
+ cls.FT,
+ cls.Parent,
+ cls.TU,
+ cls.Ff,
+ cls.V,
+ cls.DV,
+ cls.Kids,
+ cls.AA,
+ )
+
+ @classmethod
+ def attributes_dict(cls) -> Dict[str, str]:
+ return {
+ cls.FT: "Field Type",
+ cls.Parent: "Parent",
+ cls.T: "Field Name",
+ cls.TU: "Alternate Field Name",
+ cls.TM: "Mapping Name",
+ cls.Ff: "Field Flags",
+ cls.V: "Value",
+ cls.DV: "Default Value",
+ }
+
+
+class CheckboxRadioButtonAttributes:
+ """TABLE 8.76 Field flags common to all field types"""
+
+ Opt = "/Opt" # Options, Optional
+
+ @classmethod
+ def attributes(cls) -> Tuple[str, ...]:
+ return (cls.Opt,)
+
+ @classmethod
+ def attributes_dict(cls) -> Dict[str, str]:
+ return {
+ cls.Opt: "Options",
+ }
+
+
+class FieldFlag(IntFlag):
+ """TABLE 8.70 Field flags common to all field types"""
+
+ READ_ONLY = 1
+ REQUIRED = 2
+ NO_EXPORT = 4
+
+
+class DocumentInformationAttributes:
+ """TABLE 10.2 Entries in the document information dictionary."""
+
+ TITLE = "/Title" # text string, optional
+ AUTHOR = "/Author" # text string, optional
+ SUBJECT = "/Subject" # text string, optional
+ KEYWORDS = "/Keywords" # text string, optional
+ CREATOR = "/Creator" # text string, optional
+ PRODUCER = "/Producer" # text string, optional
+ CREATION_DATE = "/CreationDate" # date, optional
+ MOD_DATE = "/ModDate" # date, optional
+ TRAPPED = "/Trapped" # name, optional
+
+
+class PageLayouts:
+ """Page 84, PDF 1.4 reference."""
+
+ SINGLE_PAGE = "/SinglePage"
+ ONE_COLUMN = "/OneColumn"
+ TWO_COLUMN_LEFT = "/TwoColumnLeft"
+ TWO_COLUMN_RIGHT = "/TwoColumnRight"
+
+
+class GraphicsStateParameters:
+ """Table 4.8 of the 1.7 reference."""
+
+ TYPE = "/Type" # name, optional
+ LW = "/LW" # number, optional
+ # TODO: Many more!
+ FONT = "/Font" # array, optional
+ S_MASK = "/SMask" # dictionary or name, optional
+
+
+class CatalogDictionary:
+ """Table 3.25 in the 1.7 reference."""
+
+ TYPE = "/Type" # name, required; must be /Catalog
+ VERSION = "/Version" # name
+ PAGES = "/Pages" # dictionary, required
+ PAGE_LABELS = "/PageLabels" # number tree, optional
+ NAMES = "/Names" # dictionary, optional
+ DESTS = "/Dests" # dictionary, optional
+ VIEWER_PREFERENCES = "/ViewerPreferences" # dictionary, optional
+ PAGE_LAYOUT = "/PageLayout" # name, optional
+ PAGE_MODE = "/PageMode" # name, optional
+ OUTLINES = "/Outlines" # dictionary, optional
+ THREADS = "/Threads" # array, optional
+ OPEN_ACTION = "/OpenAction" # array or dictionary or name, optional
+ AA = "/AA" # dictionary, optional
+ URI = "/URI" # dictionary, optional
+ ACRO_FORM = "/AcroForm" # dictionary, optional
+ METADATA = "/Metadata" # stream, optional
+ STRUCT_TREE_ROOT = "/StructTreeRoot" # dictionary, optional
+ MARK_INFO = "/MarkInfo" # dictionary, optional
+ LANG = "/Lang" # text string, optional
+ SPIDER_INFO = "/SpiderInfo" # dictionary, optional
+ OUTPUT_INTENTS = "/OutputIntents" # array, optional
+ PIECE_INFO = "/PieceInfo" # dictionary, optional
+ OC_PROPERTIES = "/OCProperties" # dictionary, optional
+ PERMS = "/Perms" # dictionary, optional
+ LEGAL = "/Legal" # dictionary, optional
+ REQUIREMENTS = "/Requirements" # array, optional
+ COLLECTION = "/Collection" # dictionary, optional
+ NEEDS_RENDERING = "/NeedsRendering" # boolean, optional
+
+
+class OutlineFontFlag(IntFlag):
+ """
+ A class used as an enumerable flag for formatting an outline font
+ """
+
+ italic = 1
+ bold = 2
+
+
+PDF_KEYS = (
+ AnnotationDictionaryAttributes,
+ CatalogAttributes,
+ CatalogDictionary,
+ CcittFaxDecodeParameters,
+ CheckboxRadioButtonAttributes,
+ ColorSpaces,
+ Core,
+ DocumentInformationAttributes,
+ EncryptionDictAttributes,
+ FieldDictionaryAttributes,
+ FilterTypeAbbreviations,
+ FilterTypes,
+ GoToActionArguments,
+ GraphicsStateParameters,
+ ImageAttributes,
+ FileSpecificationDictionaryEntries,
+ LzwFilterParameters,
+ PageAttributes,
+ PageLayouts,
+ PagesAttributes,
+ Ressources,
+ StreamAttributes,
+ TrailerKeys,
+ TypArguments,
+ TypFitArguments,
+)