pdf-forge-js/examples/buildOpsLookup.js
Kilian Schuettler 4637c66185 first commit
2025-03-16 19:10:13 +01:00

912 lines
26 KiB
JavaScript

// All the possible operations for an operator list.
const OPS = {
dependency: 1,
setLineWidth: 2,
setLineCap: 3,
setLineJoin: 4,
setMiterLimit: 5,
setDash: 6,
setRenderingIntent: 7,
setFlatness: 8,
setGState: 9,
save: 10,
restore: 11,
transform: 12,
moveTo: 13,
lineTo: 14,
curveTo: 15,
curveTo2: 16,
curveTo3: 17,
closePath: 18,
rectangle: 19,
stroke: 20,
closeStroke: 21,
fill: 22,
eoFill: 23,
fillStroke: 24,
eoFillStroke: 25,
closeFillStroke: 26,
closeEOFillStroke: 27,
endPath: 28,
clip: 29,
eoClip: 30,
beginText: 31,
endText: 32,
setCharSpacing: 33,
setWordSpacing: 34,
setHScale: 35,
setLeading: 36,
setFont: 37,
setTextRenderingMode: 38,
setTextRise: 39,
moveText: 40,
setLeadingMoveText: 41,
setTextMatrix: 42,
nextLine: 43,
showText: 44,
showSpacedText: 45,
nextLineShowText: 46,
nextLineSetSpacingShowText: 47,
setCharWidth: 48,
setCharWidthAndBounds: 49,
setStrokeColorSpace: 50,
setFillColorSpace: 51,
setStrokeColor: 52,
setStrokeColorN: 53,
setFillColor: 54,
setFillColorN: 55,
setStrokeGray: 56,
setFillGray: 57,
setStrokeRGBColor: 58,
setFillRGBColor: 59,
setStrokeCMYKColor: 60,
setFillCMYKColor: 61,
shadingFill: 62,
beginInlineImage: 63,
beginImageData: 64,
endInlineImage: 65,
paintXObject: 66,
markPoint: 67,
markPointProps: 68,
beginMarkedContent: 69,
beginMarkedContentProps: 70,
endMarkedContent: 71,
beginCompat: 72,
endCompat: 73,
paintFormXObjectBegin: 74,
paintFormXObjectEnd: 75,
beginGroup: 76,
endGroup: 77,
// beginAnnotations: 78,
// endAnnotations: 79,
beginAnnotation: 80,
endAnnotation: 81,
// paintJpegXObject: 82,
paintImageMaskXObject: 83,
paintImageMaskXObjectGroup: 84,
paintImageXObject: 85,
paintInlineImageXObject: 86,
paintInlineImageXObjectGroup: 87,
paintImageXObjectRepeat: 88,
paintImageMaskXObjectRepeat: 89,
paintSolidColorImageMask: 90,
constructPath: 91,
setStrokeTransparent: 92,
setFillTransparent: 93
};
const opMap = {
// Graphic state
w: { id: OPS.setLineWidth, numArgs: 1, variableArgs: false },
J: { id: OPS.setLineCap, numArgs: 1, variableArgs: false },
j: { id: OPS.setLineJoin, numArgs: 1, variableArgs: false },
M: { id: OPS.setMiterLimit, numArgs: 1, variableArgs: false },
d: { id: OPS.setDash, numArgs: 2, variableArgs: false },
ri: { id: OPS.setRenderingIntent, numArgs: 1, variableArgs: false },
i: { id: OPS.setFlatness, numArgs: 1, variableArgs: false },
gs: { id: OPS.setGState, numArgs: 1, variableArgs: false },
q: { id: OPS.save, numArgs: 0, variableArgs: false },
Q: { id: OPS.restore, numArgs: 0, variableArgs: false },
cm: { id: OPS.transform, numArgs: 6, variableArgs: false },
// Path
m: { id: OPS.moveTo, numArgs: 2, variableArgs: false },
l: { id: OPS.lineTo, numArgs: 2, variableArgs: false },
c: { id: OPS.curveTo, numArgs: 6, variableArgs: false },
v: { id: OPS.curveTo2, numArgs: 4, variableArgs: false },
y: { id: OPS.curveTo3, numArgs: 4, variableArgs: false },
h: { id: OPS.closePath, numArgs: 0, variableArgs: false },
re: { id: OPS.rectangle, numArgs: 4, variableArgs: false },
S: { id: OPS.stroke, numArgs: 0, variableArgs: false },
s: { id: OPS.closeStroke, numArgs: 0, variableArgs: false },
f: { id: OPS.fill, numArgs: 0, variableArgs: false },
F: { id: OPS.fill, numArgs: 0, variableArgs: false },
'f*': { id: OPS.eoFill, numArgs: 0, variableArgs: false },
B: { id: OPS.fillStroke, numArgs: 0, variableArgs: false },
'B*': { id: OPS.eoFillStroke, numArgs: 0, variableArgs: false },
b: { id: OPS.closeFillStroke, numArgs: 0, variableArgs: false },
'b*': { id: OPS.closeEOFillStroke, numArgs: 0, variableArgs: false },
n: { id: OPS.endPath, numArgs: 0, variableArgs: false },
// Clipping
W: { id: OPS.clip, numArgs: 0, variableArgs: false },
'W*': { id: OPS.eoClip, numArgs: 0, variableArgs: false },
// Text
BT: { id: OPS.beginText, numArgs: 0, variableArgs: false },
ET: { id: OPS.endText, numArgs: 0, variableArgs: false },
Tc: { id: OPS.setCharSpacing, numArgs: 1, variableArgs: false },
Tw: { id: OPS.setWordSpacing, numArgs: 1, variableArgs: false },
Tz: { id: OPS.setHScale, numArgs: 1, variableArgs: false },
TL: { id: OPS.setLeading, numArgs: 1, variableArgs: false },
Tf: { id: OPS.setFont, numArgs: 2, variableArgs: false },
Tr: { id: OPS.setTextRenderingMode, numArgs: 1, variableArgs: false },
Ts: { id: OPS.setTextRise, numArgs: 1, variableArgs: false },
Td: { id: OPS.moveText, numArgs: 2, variableArgs: false },
TD: { id: OPS.setLeadingMoveText, numArgs: 2, variableArgs: false },
Tm: { id: OPS.setTextMatrix, numArgs: 6, variableArgs: false },
'T*': { id: OPS.nextLine, numArgs: 0, variableArgs: false },
Tj: { id: OPS.showText, numArgs: 1, variableArgs: false },
TJ: { id: OPS.showSpacedText, numArgs: 1, variableArgs: false },
'\'': { id: OPS.nextLineShowText, numArgs: 1, variableArgs: false },
'"': {
id: OPS.nextLineSetSpacingShowText,
numArgs: 3,
variableArgs: false
},
// Type3 fonts
d0: { id: OPS.setCharWidth, numArgs: 2, variableArgs: false },
d1: {
id: OPS.setCharWidthAndBounds,
numArgs: 6,
variableArgs: false
},
// Color
CS: { id: OPS.setStrokeColorSpace, numArgs: 1, variableArgs: false },
cs: { id: OPS.setFillColorSpace, numArgs: 1, variableArgs: false },
SC: { id: OPS.setStrokeColor, numArgs: 4, variableArgs: true },
SCN: { id: OPS.setStrokeColorN, numArgs: 33, variableArgs: true },
sc: { id: OPS.setFillColor, numArgs: 4, variableArgs: true },
scn: { id: OPS.setFillColorN, numArgs: 33, variableArgs: true },
G: { id: OPS.setStrokeGray, numArgs: 1, variableArgs: false },
g: { id: OPS.setFillGray, numArgs: 1, variableArgs: false },
RG: { id: OPS.setStrokeRGBColor, numArgs: 3, variableArgs: false },
rg: { id: OPS.setFillRGBColor, numArgs: 3, variableArgs: false },
K: { id: OPS.setStrokeCMYKColor, numArgs: 4, variableArgs: false },
k: { id: OPS.setFillCMYKColor, numArgs: 4, variableArgs: false },
// Shading
sh: { id: OPS.shadingFill, numArgs: 1, variableArgs: false },
// Images
BI: { id: OPS.beginInlineImage, numArgs: 0, variableArgs: false },
ID: { id: OPS.beginImageData, numArgs: 0, variableArgs: false },
EI: { id: OPS.endInlineImage, numArgs: 1, variableArgs: false },
// XObjects
Do: { id: OPS.paintXObject, numArgs: 1, variableArgs: false },
MP: { id: OPS.markPoint, numArgs: 1, variableArgs: false },
DP: { id: OPS.markPointProps, numArgs: 2, variableArgs: false },
BMC: { id: OPS.beginMarkedContent, numArgs: 1, variableArgs: false },
BDC: {
id: OPS.beginMarkedContentProps,
numArgs: 2,
variableArgs: false
},
EMC: { id: OPS.endMarkedContent, numArgs: 0, variableArgs: false },
// Compatibility
BX: { id: OPS.beginCompat, numArgs: 0, variableArgs: false },
EX: { id: OPS.endCompat, numArgs: 0, variableArgs: false }
};
const invertedOPS = Object.entries(OPS).reduce((acc, [key, value]) => {
acc[value] = {
name: key,
keyword: Object.entries(opMap).find(([_, op]) => op.id === value)?.[0] || null,
description: getOperatorDescription(key),
...(opMap[Object.entries(opMap).find(([_, op]) => op.id === value)?.[0]] || {})
};
return acc;
}, {});
function getOperatorDescription(opName) {
const descriptions = {
setLineWidth: 'Sets the line width in the graphics state',
setLineCap: 'Sets the line cap style in the graphics state (0=butt, 1=round, 2=square)',
setLineJoin: 'Sets the line join style in the graphics state (0=miter, 1=round, 2=bevel)',
setMiterLimit: 'Sets the miter limit in the graphics state',
setDash: 'Sets the line dash pattern in the graphics state',
setRenderingIntent: 'Sets the color rendering intent in the graphics state',
setFlatness: 'Sets the flatness tolerance in the graphics state',
setGState: 'Sets the specified parameters in the graphics state',
save: 'Pushes a copy of the current graphics state onto the graphics state stack',
restore: 'Restores the graphics state by popping it from the stack',
transform: 'Modifies the current transformation matrix (CTM)',
moveTo: 'Begins a new subpath by moving to coordinates (x, y)',
lineTo: 'Adds a straight line segment to the current path',
curveTo: 'Adds a Bézier curve segment to the current path using two control points',
curveTo2: 'Adds a Bézier curve segment to the current path using one control point',
curveTo3: 'Adds a Bézier curve segment to the current path using one control point',
closePath: 'Closes the current subpath',
rectangle: 'Adds a rectangle to the current path',
stroke: 'Strokes the current path',
closeStroke: 'Closes and strokes the current path',
fill: 'Fills the current path using nonzero winding number rule',
eoFill: 'Fills the current path using even-odd rule',
fillStroke: 'Fills and strokes the current path using nonzero winding number rule',
eoFillStroke: 'Fills and strokes the current path using even-odd rule',
closeFillStroke: 'Closes, fills, and strokes the current path using nonzero winding number rule',
closeEOFillStroke: 'Closes, fills, and strokes the current path using even-odd rule',
endPath: 'Ends the current path without filling or stroking',
clip: 'Sets the current path as the clipping path using nonzero winding number rule',
eoClip: 'Sets the current path as the clipping path using even-odd rule',
beginText: 'Begins a text object',
endText: 'Ends a text object',
setCharSpacing: 'Sets the character spacing',
setWordSpacing: 'Sets the word spacing',
setHScale: 'Sets the horizontal scaling',
setLeading: 'Sets the text leading',
setFont: 'Sets the text font and size',
setTextRenderingMode: 'Sets the text rendering mode',
setTextRise: 'Sets the text rise',
moveText: 'Moves to the start of the next line using offset coordinates',
setLeadingMoveText: 'Sets the text leading and moves to the next line',
setTextMatrix: 'Sets the text matrix and text line matrix',
nextLine: 'Moves to the start of the next line',
showText: 'Shows a text string',
showSpacedText: 'Shows a text string with individual glyph positioning',
nextLineShowText: 'Moves to the next line and shows a text string',
nextLineSetSpacingShowText: 'Sets word and character spacing, moves to next line, and shows text',
setCharWidth: 'Sets the character width information for Type 3 fonts',
setCharWidthAndBounds: 'Sets the character width and bounding box for Type 3 fonts',
setStrokeColorSpace: 'Sets the color space for stroking operations',
setFillColorSpace: 'Sets the color space for nonstroking operations',
setStrokeColor: 'Sets the color for stroking operations',
setStrokeColorN: 'Sets the color for stroking operations (ICCBased and special color spaces)',
setFillColor: 'Sets the color for nonstroking operations',
setFillColorN: 'Sets the color for nonstroking operations (ICCBased and special color spaces)',
setStrokeGray: 'Sets the gray level for stroking operations',
setFillGray: 'Sets the gray level for nonstroking operations',
setStrokeRGBColor: 'Sets the RGB color for stroking operations',
setFillRGBColor: 'Sets the RGB color for nonstroking operations',
setStrokeCMYKColor: 'Sets the CMYK color for stroking operations',
setFillCMYKColor: 'Sets the CMYK color for nonstroking operations',
shadingFill: 'Fills the current path using a shading pattern',
beginInlineImage: 'Begins an inline image object',
beginImageData: 'Begins the inline image data',
endInlineImage: 'Ends an inline image object',
paintXObject: 'Paints the specified XObject',
markPoint: 'Marks a point in the content stream',
markPointProps: 'Marks a point in the content stream with properties',
beginMarkedContent: 'Begins a marked-content sequence',
beginMarkedContentProps: 'Begins a marked-content sequence with properties',
endMarkedContent: 'Ends a marked-content sequence',
beginCompat: 'Begins a compatibility section',
endCompat: 'Ends a compatibility section',
paintFormXObjectBegin: 'Begins painting a form XObject',
paintFormXObjectEnd: 'Ends painting a form XObject',
beginGroup: 'Begins a transparency group',
endGroup: 'Ends a transparency group',
beginAnnotation: 'Begins an annotation',
endAnnotation: 'Ends an annotation',
paintImageMaskXObject: 'Paints an image mask XObject',
paintImageMaskXObjectGroup: 'Paints an image mask XObject group',
paintImageXObject: 'Paints an image XObject',
paintInlineImageXObject: 'Paints an inline image XObject',
paintInlineImageXObjectGroup: 'Paints an inline image XObject group',
paintImageXObjectRepeat: 'Paints a repeated image XObject',
paintImageMaskXObjectRepeat: 'Paints a repeated image mask XObject',
paintSolidColorImageMask: 'Paints a solid color image mask',
constructPath: 'Constructs a path from the specified segments',
setStrokeTransparent: 'Sets the stroke transparency',
setFillTransparent: 'Sets the fill transparency',
dependency: 'Marks a resource dependency'
};
return descriptions[opName] || 'No description available';
}
const opLookup = {
'1': {
name: 'dependency',
keyword: "Do",
description: 'Marks a resource dependency',
numArgs: 0,
variableArgs: false
},
'2': {
name: 'setLineWidth',
keyword: 'w',
description: 'Sets the line width in the graphics state',
numArgs: 1,
variableArgs: false
},
'3': {
name: 'setLineCap',
keyword: 'J',
description: 'Sets the line cap style in the graphics state (0=butt, 1=round, 2=square)',
numArgs: 1,
variableArgs: false
},
'4': {
name: 'setLineJoin',
keyword: 'j',
description: 'Sets the line join style in the graphics state (0=miter, 1=round, 2=bevel)',
numArgs: 1,
variableArgs: false
},
'5': {
name: 'setMiterLimit',
keyword: 'M',
description: 'Sets the miter limit in the graphics state',
numArgs: 1,
variableArgs: false
},
'6': {
name: 'setDash',
keyword: 'd',
description: 'Sets the line dash pattern in the graphics state',
numArgs: 2,
variableArgs: false
},
'7': {
name: 'setRenderingIntent',
keyword: 'ri',
description: 'Sets the color rendering intent in the graphics state',
numArgs: 1,
variableArgs: false
},
'8': {
name: 'setFlatness',
keyword: 'i',
description: 'Sets the flatness tolerance in the graphics state',
numArgs: 1,
variableArgs: false
},
'9': {
name: 'setGState',
keyword: 'gs',
description: 'Sets the specified parameters in the graphics state',
numArgs: 1,
variableArgs: false
},
'10': {
name: 'save',
keyword: 'q',
description: 'Pushes a copy of the current graphics state onto the graphics state stack',
numArgs: 0,
variableArgs: false
},
'11': {
name: 'restore',
keyword: 'Q',
description: 'Restores the graphics state by popping it from the stack',
numArgs: 0,
variableArgs: false
},
'12': {
name: 'transform',
keyword: 'cm',
description: 'Modifies the current transformation matrix (CTM)',
numArgs: 6,
variableArgs: false
},
'13': {
name: 'moveTo',
keyword: 'm',
description: 'Begins a new subpath by moving to coordinates (x, y)',
numArgs: 2,
variableArgs: false
},
'14': {
name: 'lineTo',
keyword: 'l',
description: 'Adds a straight line segment to the current path',
numArgs: 2,
variableArgs: false
},
'15': {
name: 'curveTo',
keyword: 'c',
description: 'Adds a Bézier curve segment to the current path using two control points',
numArgs: 6,
variableArgs: false
},
'16': {
name: 'curveTo2',
keyword: 'v',
description: 'Adds a Bézier curve segment to the current path using one control point',
numArgs: 4,
variableArgs: false
},
'17': {
name: 'curveTo3',
keyword: 'y',
description: 'Adds a Bézier curve segment to the current path using one control point',
numArgs: 4,
variableArgs: false
},
'18': {
name: 'closePath',
keyword: 'h',
description: 'Closes the current subpath',
numArgs: 0,
variableArgs: false
},
'19': {
name: 'rectangle',
keyword: 're',
description: 'Adds a rectangle to the current path',
numArgs: 4,
variableArgs: false
},
'20': {
name: 'stroke',
keyword: 'S',
description: 'Strokes the current path',
numArgs: 0,
variableArgs: false
},
'21': {
name: 'closeStroke',
keyword: 's',
description: 'Closes and strokes the current path',
numArgs: 0,
variableArgs: false
},
'22': {
name: 'fill',
keyword: 'f',
description: 'Fills the current path using nonzero winding number rule',
numArgs: 0,
variableArgs: false
},
'23': {
name: 'eoFill',
keyword: 'f*',
description: 'Fills the current path using even-odd rule',
numArgs: 0,
variableArgs: false
},
'24': {
name: 'fillStroke',
keyword: 'B',
description: 'Fills and strokes the current path using nonzero winding number rule',
numArgs: 0,
variableArgs: false
},
'25': {
name: 'eoFillStroke',
keyword: 'B*',
description: 'Fills and strokes the current path using even-odd rule',
numArgs: 0,
variableArgs: false
},
'26': {
name: 'closeFillStroke',
keyword: 'b',
description: 'Closes, fills, and strokes the current path using nonzero winding number rule',
numArgs: 0,
variableArgs: false
},
'27': {
name: 'closeEOFillStroke',
keyword: 'b*',
description: 'Closes, fills, and strokes the current path using even-odd rule',
numArgs: 0,
variableArgs: false
},
'28': {
name: 'endPath',
keyword: 'n',
description: 'Ends the current path without filling or stroking',
numArgs: 0,
variableArgs: false
},
'29': {
name: 'clip',
keyword: 'W',
description: 'Sets the current path as the clipping path using nonzero winding number rule',
numArgs: 0,
variableArgs: false
},
'30': {
name: 'eoClip',
keyword: 'W*',
description: 'Sets the current path as the clipping path using even-odd rule',
numArgs: 0,
variableArgs: false
},
'31': {
name: 'beginText',
keyword: 'BT',
description: 'Begins a text object',
numArgs: 0,
variableArgs: false
},
'32': {
name: 'endText',
keyword: 'ET',
description: 'Ends a text object',
numArgs: 0,
variableArgs: false
},
'33': {
name: 'setCharSpacing',
keyword: 'Tc',
description: 'Sets the character spacing',
numArgs: 1,
variableArgs: false
},
'34': {
name: 'setWordSpacing',
keyword: 'Tw',
description: 'Sets the word spacing',
numArgs: 1,
variableArgs: false
},
'35': {
name: 'setHScale',
keyword: 'Tz',
description: 'Sets the horizontal scaling',
numArgs: 1,
variableArgs: false
},
'36': {
name: 'setLeading',
keyword: 'TL',
description: 'Sets the text leading',
numArgs: 1,
variableArgs: false
},
'37': {
name: 'setFont',
keyword: 'Tf',
description: 'Sets the text font and size',
numArgs: 2,
variableArgs: false
},
'38': {
name: 'setTextRenderingMode',
keyword: 'Tr',
description: 'Sets the text rendering mode',
numArgs: 1,
variableArgs: false
},
'39': {
name: 'setTextRise',
keyword: 'Ts',
description: 'Sets the text rise',
numArgs: 1,
variableArgs: false
},
'40': {
name: 'moveText',
keyword: 'Td',
description: 'Moves to the start of the next line using offset coordinates',
numArgs: 2,
variableArgs: false
},
'41': {
name: 'setLeadingMoveText',
keyword: 'TD',
description: 'Sets the text leading and moves to the next line',
numArgs: 2,
variableArgs: false
},
'42': {
name: 'setTextMatrix',
keyword: 'Tm',
description: 'Sets the text matrix and text line matrix',
numArgs: 6,
variableArgs: false
},
'43': {
name: 'nextLine',
keyword: 'T*',
description: 'Moves to the start of the next line',
numArgs: 0,
variableArgs: false
},
'44': {
name: 'showText',
keyword: 'Tj',
description: 'Shows a text string',
numArgs: 1,
variableArgs: false
},
'45': {
name: 'showSpacedText',
keyword: 'TJ',
description: 'Shows a text string with individual glyph positioning',
numArgs: 1,
variableArgs: false
},
'46': {
name: 'nextLineShowText',
keyword: '\'',
description: 'Moves to the next line and shows a text string',
numArgs: 1,
variableArgs: false
},
'47': {
name: 'nextLineSetSpacingShowText',
keyword: '"',
description: 'Sets word and character spacing, moves to next line, and shows text',
numArgs: 3,
variableArgs: false
},
'48': {
name: 'setCharWidth',
keyword: 'd0',
description: 'Sets the character width information for Type 3 fonts',
numArgs: 2,
variableArgs: false
},
'49': {
name: 'setCharWidthAndBounds',
keyword: 'd1',
description: 'Sets the character width and bounding box for Type 3 fonts',
numArgs: 6,
variableArgs: false
},
'50': {
name: 'setStrokeColorSpace',
keyword: 'CS',
description: 'Sets the color space for stroking operations',
numArgs: 1,
variableArgs: false
},
'51': {
name: 'setFillColorSpace',
keyword: 'cs',
description: 'Sets the color space for nonstroking operations',
numArgs: 1,
variableArgs: false
},
'52': {
name: 'setStrokeColor',
keyword: 'SC',
description: 'Sets the color for stroking operations',
numArgs: 4,
variableArgs: true
},
'53': {
name: 'setStrokeColorN',
keyword: 'SCN',
description: 'Sets the color for stroking operations (ICCBased and special color spaces)',
numArgs: 33,
variableArgs: true
},
'54': {
name: 'setFillColor',
keyword: 'sc',
description: 'Sets the color for nonstroking operations',
numArgs: 4,
variableArgs: true
},
'55': {
name: 'setFillColorN',
keyword: 'scn',
description: 'Sets the color for nonstroking operations (ICCBased and special color spaces)',
numArgs: 33,
variableArgs: true
},
'56': {
name: 'setStrokeGray',
keyword: 'G',
description: 'Sets the gray level for stroking operations',
numArgs: 1,
variableArgs: false
},
'57': {
name: 'setFillGray',
keyword: 'g',
description: 'Sets the gray level for nonstroking operations',
numArgs: 1,
variableArgs: false
},
'58': {
name: 'setStrokeRGBColor',
keyword: 'RG',
description: 'Sets the RGB color for stroking operations',
numArgs: 3,
variableArgs: false
},
'59': {
name: 'setFillRGBColor',
keyword: 'rg',
description: 'Sets the RGB color for nonstroking operations',
numArgs: 3,
variableArgs: false
},
'60': {
name: 'setStrokeCMYKColor',
keyword: 'K',
description: 'Sets the CMYK color for stroking operations',
numArgs: 4,
variableArgs: false
},
'61': {
name: 'setFillCMYKColor',
keyword: 'k',
description: 'Sets the CMYK color for nonstroking operations',
numArgs: 4,
variableArgs: false
},
'62': {
name: 'shadingFill',
keyword: 'sh',
description: 'Fills the current path using a shading pattern',
numArgs: 1,
variableArgs: false
},
'63': {
name: 'beginInlineImage',
keyword: 'BI',
description: 'Begins an inline image object',
numArgs: 0,
variableArgs: false
},
'64': {
name: 'beginImageData',
keyword: 'ID',
description: 'Begins the inline image data',
numArgs: 0,
variableArgs: false
},
'65': {
name: 'endInlineImage',
keyword: 'EI',
description: 'Ends an inline image object',
numArgs: 1,
variableArgs: false
},
'66': {
name: 'paintXObject',
keyword: 'Do',
description: 'Paints the specified XObject',
numArgs: 1,
variableArgs: false
},
'67': {
name: 'markPoint',
keyword: 'MP',
description: 'Marks a point in the content stream',
numArgs: 1,
variableArgs: false
},
'68': {
name: 'markPointProps',
keyword: 'DP',
description: 'Marks a point in the content stream with properties',
numArgs: 2,
variableArgs: false
},
'69': {
name: 'beginMarkedContent',
keyword: 'BMC',
description: 'Begins a marked-content sequence',
numArgs: 1,
variableArgs: false
},
'70': {
name: 'beginMarkedContentProps',
keyword: 'BDC',
description: 'Begins a marked-content sequence with properties',
numArgs: 2,
variableArgs: false
},
'71': {
name: 'endMarkedContent',
keyword: 'EMC',
description: 'Ends a marked-content sequence',
numArgs: 0,
variableArgs: false
},
'72': {
name: 'beginCompat',
keyword: 'BX',
description: 'Begins a compatibility section',
numArgs: 0,
variableArgs: false
},
'73': {
name: 'endCompat',
keyword: 'EX',
description: 'Ends a compatibility section',
numArgs: 0,
variableArgs: false
},
'74': {
name: 'paintFormXObjectBegin',
keyword: null,
description: 'Begins painting a form XObject'
},
'75': {
name: 'paintFormXObjectEnd',
keyword: null,
description: 'Ends painting a form XObject'
},
'76': {
name: 'beginGroup',
keyword: null,
description: 'Begins a transparency group'
},
'77': {
name: 'endGroup',
keyword: null,
description: 'Ends a transparency group'
},
'80': {
name: 'beginAnnotation',
keyword: null,
description: 'Begins an annotation'
},
'81': {
name: 'endAnnotation',
keyword: null,
description: 'Ends an annotation'
},
'83': {
name: 'paintImageMaskXObject',
keyword: null,
description: 'Paints an image mask XObject'
},
'84': {
name: 'paintImageMaskXObjectGroup',
keyword: null,
description: 'Paints an image mask XObject group'
},
'85': {
name: 'paintImageXObject',
keyword: null,
description: 'Paints an image XObject'
},
'86': {
name: 'paintInlineImageXObject',
keyword: null,
description: 'Paints an inline image XObject'
},
'87': {
name: 'paintInlineImageXObjectGroup',
keyword: null,
description: 'Paints an inline image XObject group'
},
'88': {
name: 'paintImageXObjectRepeat',
keyword: null,
description: 'Paints a repeated image XObject'
},
'89': {
name: 'paintImageMaskXObjectRepeat',
keyword: null,
description: 'Paints a repeated image mask XObject'
},
'90': {
name: 'paintSolidColorImageMask',
keyword: null,
description: 'Paints a solid color image mask'
},
'91': {
name: 'constructPath',
keyword: null,
description: 'Constructs a path from the specified segments'
},
'92': {
name: 'setStrokeTransparent',
keyword: null,
description: 'Sets the stroke transparency'
},
'93': {
name: 'setFillTransparent',
keyword: null,
description: 'Sets the fill transparency'
}
};
console.log(opLookup[2]); // Example output for OpCode 2 (setLineWidth)