Class PdfCanvasProcessor
- java.lang.Object
-
- com.itextpdf.kernel.pdf.canvas.parser.PdfCanvasProcessor
-
public class PdfCanvasProcessor extends java.lang.Object
Processor for a PDF content stream.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
PdfCanvasProcessor.BeginMarkedContentDictionaryOperator
A handler that implements operator (BDC).private static class
PdfCanvasProcessor.BeginMarkedContentOperator
A handler that implements operator (BMC).private static class
PdfCanvasProcessor.BeginTextOperator
A handler that implements operator (BT).private static class
PdfCanvasProcessor.ClipPathOperator
A handler that implements operator (W, W*).private static class
PdfCanvasProcessor.CloseSubpathOperator
A handler that implements operator (h).private static class
PdfCanvasProcessor.CurveFirstPointDuplicatedOperator
A handler that implements operator (v).private static class
PdfCanvasProcessor.CurveFourhPointDuplicatedOperator
A handler that implements operator (y).private static class
PdfCanvasProcessor.CurveOperator
A handler that implements operator (c).private static class
PdfCanvasProcessor.DoOperator
A handler that implements operator (Do).private static class
PdfCanvasProcessor.EndImageOperator
A handler that implements operator (EI).private static class
PdfCanvasProcessor.EndMarkedContentOperator
A handler that implements operator (EMC).private static class
PdfCanvasProcessor.EndTextOperator
A handler that implements operator (ET).private static class
PdfCanvasProcessor.FormXObjectDoHandler
An XObject subtype handler for FORMprivate static class
PdfCanvasProcessor.IgnoreOperator
A handler that implements operator (unregistered).private static class
PdfCanvasProcessor.IgnoreXObjectDoHandler
An XObject subtype handler that does nothingprivate static class
PdfCanvasProcessor.ImageXObjectDoHandler
An XObject subtype handler for IMAGEprivate static class
PdfCanvasProcessor.LineToOperator
A handler that implements operator (l).private static class
PdfCanvasProcessor.ModifyCurrentTransformationMatrixOperator
A handler that implements operator (cm).private static class
PdfCanvasProcessor.MoveNextLineAndShowTextOperator
A handler that implements operator (').private static class
PdfCanvasProcessor.MoveNextLineAndShowTextWithSpacingOperator
A handler that implements operator (").private static class
PdfCanvasProcessor.MoveToOperator
A handler that implements operator (m).private static class
PdfCanvasProcessor.PaintPathOperator
A handler that implements operator (S, s, f, F, f*, B, B*, b, b*).protected static class
PdfCanvasProcessor.PopGraphicsStateOperator
A handler that implements operator (Q).private static class
PdfCanvasProcessor.ProcessGraphicsStateResourceOperator
A handler that implements operator (gs).private static class
PdfCanvasProcessor.PushGraphicsStateOperator
A handler that implements operator (q).private static class
PdfCanvasProcessor.RectangleOperator
A handler that implements operator (re).private static class
PdfCanvasProcessor.SetCMYKFillOperator
A handler that implements operator (k).private static class
PdfCanvasProcessor.SetCMYKStrokeOperator
A handler that implements operator (K).private static class
PdfCanvasProcessor.SetColorFillOperator
A handler that implements operator (sc / scn).private static class
PdfCanvasProcessor.SetColorSpaceFillOperator
A handler that implements operator (CS).private static class
PdfCanvasProcessor.SetColorSpaceStrokeOperator
A handler that implements operator (cs).private static class
PdfCanvasProcessor.SetColorStrokeOperator
A handler that implements operator (SC / SCN).private static class
PdfCanvasProcessor.SetGrayFillOperator
A handler that implements operator (g).private static class
PdfCanvasProcessor.SetGrayStrokeOperator
A handler that implements operator (G).private static class
PdfCanvasProcessor.SetLineCapOperator
A handler that implements operator (J).private static class
PdfCanvasProcessor.SetLineDashPatternOperator
A handler that implements operator (d).private static class
PdfCanvasProcessor.SetLineJoinOperator
A handler that implements operator (j).private static class
PdfCanvasProcessor.SetLineWidthOperator
A handler that implements operator (w).private static class
PdfCanvasProcessor.SetMiterLimitOperator
A handler that implements operator (M).private static class
PdfCanvasProcessor.SetRGBFillOperator
A handler that implements operator (rg).private static class
PdfCanvasProcessor.SetRGBStrokeOperator
A handler that implements operator (RG).private static class
PdfCanvasProcessor.SetTextCharacterSpacingOperator
A handler that implements operator (Tc).private static class
PdfCanvasProcessor.SetTextFontOperator
A handler that implements operator (Tf).private static class
PdfCanvasProcessor.SetTextHorizontalScalingOperator
A handler that implements operator (Tz).private static class
PdfCanvasProcessor.SetTextLeadingOperator
A handler that implements operator (TL).private static class
PdfCanvasProcessor.SetTextRenderModeOperator
A handler that implements operator (Tr).private static class
PdfCanvasProcessor.SetTextRiseOperator
A handler that implements operator (Ts).private static class
PdfCanvasProcessor.SetTextWordSpacingOperator
A handler that implements operator (Tw).private static class
PdfCanvasProcessor.ShowTextArrayOperator
A handler that implements operator (TJ).private static class
PdfCanvasProcessor.ShowTextOperator
A handler that implements operator (Tj).private static class
PdfCanvasProcessor.TextMoveNextLineOperator
A handler that implements operator (T*).private static class
PdfCanvasProcessor.TextMoveStartNextLineOperator
A handler that implements operator (Td).private static class
PdfCanvasProcessor.TextMoveStartNextLineWithLeadingOperator
A handler that implements operator (TD).private static class
PdfCanvasProcessor.TextSetTextMatrixOperator
A handler that implements operator (Tm).
-
Field Summary
Fields Modifier and Type Field Description private java.util.Map<java.lang.Integer,java.lang.ref.WeakReference<PdfFont>>
cachedFonts
The font cacheprotected int
clippingRule
Specifies the filling rule which should be applied while calculating new clipping path.protected Path
currentPath
static java.lang.String
DEFAULT_OPERATOR
protected IEventListener
eventListener
Listener that will be notified of render eventsprivate java.util.Stack<ParserGraphicsState>
gsStack
Stack keeping track of the graphics state.protected boolean
isClip
Indicates whether the current clipping path should be modified by intersecting it with the current path.private java.util.Stack<CanvasTag>
markedContentStack
A stack containing marked content info.private MemoryLimitsAwareHandler
memoryLimitsHandler
A memory limits handler.private java.util.Map<java.lang.String,IContentOperator>
operators
A map with all supported operators (PDF syntax).private long
pageSize
Page size in bytes.private java.util.List<PdfResources>
resourcesStack
Resources for the content stream.protected java.util.Set<EventType>
supportedEvents
Cache supported events in case the user'sIEventListener.getSupportedEvents()
method is not very efficientprivate Matrix
textLineMatrix
private Matrix
textMatrix
private java.util.Map<PdfName,IXObjectDoHandler>
xobjectDoHandlers
A map with all supported XObject handlers
-
Constructor Summary
Constructors Constructor Description PdfCanvasProcessor(IEventListener eventListener)
Creates a new PDF Content Stream Processor that will send its output to the designated render listener.PdfCanvasProcessor(IEventListener eventListener, java.util.Map<java.lang.String,IContentOperator> additionalContentOperators)
Creates a new PDF Content Stream Processor that will send its output to the designated render listener.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private void
applyTextAdjust(float tj)
Adjusts the text matrix for the specified adjustment value (see TJ operator in the PDF spec for information)protected void
beginMarkedContent(PdfName tag, PdfDictionary dict)
Add to the marked content stackprivate void
beginText()
Used to trigger beginTextBlock on the renderListenerprivate void
displayImage(java.util.Stack<CanvasTag> canvasTagHierarchy, PdfStream imageStream, PdfName resourceName, boolean isInline)
private void
displayPdfString(PdfString string)
Displays text.private void
displayXObject(PdfName resourceName)
Displays an XObject using the registered handler for this XObject's subtypeprotected void
endMarkedContent()
Remove the latest marked content from the stack.private void
endText()
Used to trigger endTextBlock on the renderListenerprotected void
eventOccurred(IEventData data, EventType type)
This is a proxy to pass only those events to the event listener which are supported by it.private static Color
getColor(int nOperands, java.util.List<PdfObject> operands)
Gets a color based on a list of operands.private static Color
getColor(PdfColorSpace pdfColorSpace, java.util.List<PdfObject> operands, PdfResources resources)
Gets a color based on a list of operands and Color space.private static float[]
getColorants(java.util.List<PdfObject> operands)
IEventListener
getEventListener()
Accessor method for theIEventListener
object maintained in this class.protected PdfFont
getFont(PdfDictionary fontDict)
Creates aPdfFont
object by a font dictionary.ParserGraphicsState
getGraphicsState()
Gets the currentParserGraphicsState
java.util.Collection<java.lang.String>
getRegisteredOperatorStrings()
Gets theCollection
containing all the registered operators strings.protected PdfResources
getResources()
protected PdfStream
getXObjectStream(PdfName xobjectName)
private void
initClippingPath(PdfPage page)
protected void
invokeOperator(PdfLiteral operator, java.util.List<PdfObject> operands)
Invokes an operator.protected void
paintPath(int operation, int rule)
Displays the current path.protected void
populateOperators()
Loads all the supported graphics and text state operators in a map.protected void
populateXObjectDoHandlers()
void
processContent(byte[] contentBytes, PdfResources resources)
Processes PDF syntax.void
processPageContent(PdfPage page)
Processes PDF syntax.IContentOperator
registerContentOperator(java.lang.String operatorString, IContentOperator operator)
Registers a content operator that will be called when the specified operator string is encountered during content processing.IXObjectDoHandler
registerXObjectDoHandler(PdfName xobjectSubType, IXObjectDoHandler handler)
Registers a Do handler that will be called when Do for the provided XObject subtype is encountered during content processing.void
reset()
Resets the graphics state stack, matrices and resources.
-
-
-
Field Detail
-
DEFAULT_OPERATOR
public static final java.lang.String DEFAULT_OPERATOR
- See Also:
- Constant Field Values
-
eventListener
protected final IEventListener eventListener
Listener that will be notified of render events
-
supportedEvents
protected final java.util.Set<EventType> supportedEvents
Cache supported events in case the user'sIEventListener.getSupportedEvents()
method is not very efficient
-
currentPath
protected Path currentPath
-
isClip
protected boolean isClip
Indicates whether the current clipping path should be modified by intersecting it with the current path.
-
clippingRule
protected int clippingRule
Specifies the filling rule which should be applied while calculating new clipping path.
-
operators
private java.util.Map<java.lang.String,IContentOperator> operators
A map with all supported operators (PDF syntax).
-
resourcesStack
private java.util.List<PdfResources> resourcesStack
Resources for the content stream. Current resources are always at the top of the stack. Stack is needed in case if some "inner" content stream with it's own resources is encountered (like Form XObject).
-
gsStack
private final java.util.Stack<ParserGraphicsState> gsStack
Stack keeping track of the graphics state.
-
textMatrix
private Matrix textMatrix
-
textLineMatrix
private Matrix textLineMatrix
-
xobjectDoHandlers
private java.util.Map<PdfName,IXObjectDoHandler> xobjectDoHandlers
A map with all supported XObject handlers
-
cachedFonts
private java.util.Map<java.lang.Integer,java.lang.ref.WeakReference<PdfFont>> cachedFonts
The font cache
-
markedContentStack
private java.util.Stack<CanvasTag> markedContentStack
A stack containing marked content info.
-
memoryLimitsHandler
private MemoryLimitsAwareHandler memoryLimitsHandler
A memory limits handler.
-
pageSize
private long pageSize
Page size in bytes.
-
-
Constructor Detail
-
PdfCanvasProcessor
public PdfCanvasProcessor(IEventListener eventListener)
Creates a new PDF Content Stream Processor that will send its output to the designated render listener.- Parameters:
eventListener
- theIEventListener
that will receive rendering notifications
-
PdfCanvasProcessor
public PdfCanvasProcessor(IEventListener eventListener, java.util.Map<java.lang.String,IContentOperator> additionalContentOperators)
Creates a new PDF Content Stream Processor that will send its output to the designated render listener. Also allows registration of custom IContentOperators that can influence how (and whether or not) the PDF instructions will be parsed.- Parameters:
eventListener
- theIEventListener
that will receive rendering notificationsadditionalContentOperators
- an optional map of customIContentOperator
s for rendering instructions
-
-
Method Detail
-
registerXObjectDoHandler
public IXObjectDoHandler registerXObjectDoHandler(PdfName xobjectSubType, IXObjectDoHandler handler)
Registers a Do handler that will be called when Do for the provided XObject subtype is encountered during content processing.
If you register a handler, it is a very good idea to pass the call on to the existing registered handler (returned by this call), otherwise you may inadvertently change the internal behavior of the processor.- Parameters:
xobjectSubType
- the XObject subtype this handler will process, or PdfName.DEFAULT for a catch-all handlerhandler
- the handler that will receive notification when the Do operator for the specified subtype is encountered- Returns:
- the existing registered handler, if any
-
registerContentOperator
public IContentOperator registerContentOperator(java.lang.String operatorString, IContentOperator operator)
Registers a content operator that will be called when the specified operator string is encountered during content processing.
If you register an operator, it is a very good idea to pass the call on to the existing registered operator (returned by this call), otherwise you may inadvertently change the internal behavior of the processor.- Parameters:
operatorString
- the operator id, or DEFAULT_OPERATOR for a catch-all operatoroperator
- the operator that will receive notification when the operator is encountered- Returns:
- the existing registered operator, if any
-
getRegisteredOperatorStrings
public java.util.Collection<java.lang.String> getRegisteredOperatorStrings()
Gets theCollection
containing all the registered operators strings.- Returns:
Collection
containing all the registered operators strings.
-
reset
public void reset()
Resets the graphics state stack, matrices and resources.
-
getGraphicsState
public ParserGraphicsState getGraphicsState()
Gets the currentParserGraphicsState
- Returns:
- the current
ParserGraphicsState
-
processContent
public void processContent(byte[] contentBytes, PdfResources resources)
Processes PDF syntax. Note: If you re-use a givenPdfCanvasProcessor
, you must callreset()
- Parameters:
contentBytes
- the bytes of a content streamresources
- the resources of the content stream. Must not be null.
-
processPageContent
public void processPageContent(PdfPage page)
Processes PDF syntax. Note: If you re-use a givenPdfCanvasProcessor
, you must callreset()
- Parameters:
page
- the page to process
-
getEventListener
public IEventListener getEventListener()
Accessor method for theIEventListener
object maintained in this class. Necessary for implementing custom ContentOperator implementations.- Returns:
- the renderListener
-
populateOperators
protected void populateOperators()
Loads all the supported graphics and text state operators in a map.
-
paintPath
protected void paintPath(int operation, int rule)
Displays the current path.- Parameters:
operation
- One of the possible combinations ofPathRenderInfo.STROKE
andPathRenderInfo.FILL
values orPathRenderInfo.NO_OP
rule
- EitherPdfCanvasConstants.FillingRule.NONZERO_WINDING
orPdfCanvasConstants.FillingRule.EVEN_ODD
In case it isn't applicable pass anybyte
value.
-
invokeOperator
protected void invokeOperator(PdfLiteral operator, java.util.List<PdfObject> operands)
Invokes an operator.- Parameters:
operator
- the PDF Syntax of the operatoroperands
- a list with operands
-
getResources
protected PdfResources getResources()
-
populateXObjectDoHandlers
protected void populateXObjectDoHandlers()
-
getFont
protected PdfFont getFont(PdfDictionary fontDict)
Creates aPdfFont
object by a font dictionary. The font may have been cached in case it is an indirect object.- Parameters:
fontDict
- thefont dictionary
to create the font from- Returns:
- the created font
-
beginMarkedContent
protected void beginMarkedContent(PdfName tag, PdfDictionary dict)
Add to the marked content stack- Parameters:
tag
- the tag of the marked contentdict
- the PdfDictionary associated with the marked content
-
endMarkedContent
protected void endMarkedContent()
Remove the latest marked content from the stack. Keeps track of the BMC, BDC and EMC operators.
-
beginText
private void beginText()
Used to trigger beginTextBlock on the renderListener
-
endText
private void endText()
Used to trigger endTextBlock on the renderListener
-
eventOccurred
protected void eventOccurred(IEventData data, EventType type)
This is a proxy to pass only those events to the event listener which are supported by it.- Parameters:
data
- event datatype
- event type
-
displayPdfString
private void displayPdfString(PdfString string)
Displays text.- Parameters:
string
- the text to display
-
displayXObject
private void displayXObject(PdfName resourceName)
Displays an XObject using the registered handler for this XObject's subtype- Parameters:
resourceName
- the name of the XObject to retrieve from the resource dictionary
-
displayImage
private void displayImage(java.util.Stack<CanvasTag> canvasTagHierarchy, PdfStream imageStream, PdfName resourceName, boolean isInline)
-
applyTextAdjust
private void applyTextAdjust(float tj)
Adjusts the text matrix for the specified adjustment value (see TJ operator in the PDF spec for information)- Parameters:
tj
- the text adjustment
-
initClippingPath
private void initClippingPath(PdfPage page)
-
getColor
private static Color getColor(PdfColorSpace pdfColorSpace, java.util.List<PdfObject> operands, PdfResources resources)
Gets a color based on a list of operands and Color space.
-
getColor
private static Color getColor(int nOperands, java.util.List<PdfObject> operands)
Gets a color based on a list of operands.
-
getColorants
private static float[] getColorants(java.util.List<PdfObject> operands)
-
-