Spaces:
Runtime error
Runtime error
""" | |
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 | |
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, | |
) | |
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 | |
def attributes(cls) -> Tuple[str, ...]: | |
return (cls.Opt,) | |
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, | |
) | |