Package com.itextpdf.text.pdf.parser
Class PdfContentStreamProcessor
- java.lang.Object
-
- com.itextpdf.text.pdf.parser.PdfContentStreamProcessor
-
public class PdfContentStreamProcessor extends java.lang.ObjectProcessor for a PDF content Stream.- Since:
- 2.1.4
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static classPdfContentStreamProcessor.BeginMarkedContentA content operator implementation (BMC).private static classPdfContentStreamProcessor.BeginMarkedContentDictionaryA content operator implementation (BDC).private static classPdfContentStreamProcessor.BeginTextA content operator implementation (BT).private static classPdfContentStreamProcessor.ClipPathA content operator implementation (W, W*)private static classPdfContentStreamProcessor.CloseSubpathA content operator implementation (h).private static classPdfContentStreamProcessor.CurveA content operator implementation (c).private static classPdfContentStreamProcessor.CurveFirstPointDuplicatedA content operator implementation (v).private static classPdfContentStreamProcessor.CurveFourhPointDuplicatedA content operator implementation (y).private static classPdfContentStreamProcessor.DoA content operator implementation (Do).private static classPdfContentStreamProcessor.EndMarkedContentA content operator implementation (EMC).private static classPdfContentStreamProcessor.EndPathA content operator implementation (n).private static classPdfContentStreamProcessor.EndTextA content operator implementation (ET).private static classPdfContentStreamProcessor.FormXObjectDoHandlerAn XObject subtype handler for FORMprivate static classPdfContentStreamProcessor.IgnoreOperatorContentOperatorA content operator implementation (unregistered).private static classPdfContentStreamProcessor.IgnoreXObjectDoHandlerAn XObject subtype handler that does nothingprivate static classPdfContentStreamProcessor.ImageXObjectDoHandlerAn XObject subtype handler for IMAGEprivate static classPdfContentStreamProcessor.LineToA content operator implementation (l).private static classPdfContentStreamProcessor.ModifyCurrentTransformationMatrixA content operator implementation (cm).private static classPdfContentStreamProcessor.MoveNextLineAndShowTextA content operator implementation (').private static classPdfContentStreamProcessor.MoveNextLineAndShowTextWithSpacingA content operator implementation (").private static classPdfContentStreamProcessor.MoveToA content operator implementation (m).private static classPdfContentStreamProcessor.PaintPathA content operator implementation (S, s, f, F, f*, B, B*, b, b*).private static classPdfContentStreamProcessor.PopGraphicsStateA content operator implementation (Q).private static classPdfContentStreamProcessor.ProcessGraphicsStateResourceA content operator implementation (gs).private static classPdfContentStreamProcessor.PushGraphicsStateA content operator implementation (q).private static classPdfContentStreamProcessor.RectangleA content operator implementation (re).private static classPdfContentStreamProcessor.ResourceDictionaryA resource dictionary that allows stack-like behavior to support resource dictionary inheritanceprivate static classPdfContentStreamProcessor.SetCMYKFillA content operator implementation (rg).private static classPdfContentStreamProcessor.SetCMYKStrokeA content operator implementation (RG).private static classPdfContentStreamProcessor.SetColorFillA content operator implementation (sc / scn).private static classPdfContentStreamProcessor.SetColorSpaceFillA content operator implementation (cs).private static classPdfContentStreamProcessor.SetColorSpaceStrokeA content operator implementation (CS).private static classPdfContentStreamProcessor.SetColorStrokeA content operator implementation (SC / SCN).private static classPdfContentStreamProcessor.SetGrayFillA content operator implementation (g).private static classPdfContentStreamProcessor.SetGrayStrokeA content operator implementation (G).private static classPdfContentStreamProcessor.SetLineCapA content operator implementation (J).private static classPdfContentStreamProcessor.SetLineDashPatternA content operator implementation (d).private static classPdfContentStreamProcessor.SetLineJoinA content operator implementation (j).private static classPdfContentStreamProcessor.SetLineWidthA content operator implementation (w).private static classPdfContentStreamProcessor.SetMiterLimitA content operator implementation (M).private static classPdfContentStreamProcessor.SetRGBFillA content operator implementation (rg).private static classPdfContentStreamProcessor.SetRGBStrokeA content operator implementation (RG).private static classPdfContentStreamProcessor.SetTextCharacterSpacingA content operator implementation (Tc).private static classPdfContentStreamProcessor.SetTextFontA content operator implementation (Tf).private static classPdfContentStreamProcessor.SetTextHorizontalScalingA content operator implementation (Tz).private static classPdfContentStreamProcessor.SetTextLeadingA content operator implementation (TL).private static classPdfContentStreamProcessor.SetTextRenderModeA content operator implementation (Tr).private static classPdfContentStreamProcessor.SetTextRiseA content operator implementation (Ts).private static classPdfContentStreamProcessor.SetTextWordSpacingA content operator implementation (Tw).private static classPdfContentStreamProcessor.ShowTextA content operator implementation (Tj).private static classPdfContentStreamProcessor.ShowTextArrayA content operator implementation (TJ).private static classPdfContentStreamProcessor.TextMoveNextLineA content operator implementation (T*).private static classPdfContentStreamProcessor.TextMoveStartNextLineA content operator implementation (Td).private static classPdfContentStreamProcessor.TextMoveStartNextLineWithLeadingA content operator implementation (TD).private static classPdfContentStreamProcessor.TextSetTextMatrixA content operator implementation (Tm).
-
Field Summary
Fields Modifier and Type Field Description private java.util.Map<java.lang.Integer,java.lang.ref.WeakReference<CMapAwareDocumentFont>>cachedFontsstatic java.lang.StringDEFAULTOPERATORDefault operatorprivate java.util.Stack<GraphicsState>gsStackStack keeping track of the graphics state.private java.util.Stack<MarkedContentInfo>markedContentStackA stack containing marked content info.private java.util.Map<java.lang.String,ContentOperator>operatorsA map with all supported operators (PDF syntax).private RenderListenerrenderListenerListener that will be notified of render eventsprivate PdfContentStreamProcessor.ResourceDictionaryresourcesResources for the content stream.private MatrixtextLineMatrixText line matrix.private MatrixtextMatrixText matrix.private java.util.Map<PdfName,XObjectDoHandler>xobjectDoHandlersA map with all supported XObject handlers
-
Constructor Summary
Constructors Constructor Description PdfContentStreamProcessor(RenderListener renderListener)Creates a new PDF Content Stream Processor that will send it's output to the designated render listener.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private voidapplyTextAdjust(float tj)Adjusts the text matrix for the specified adjustment value (see TJ operator in the PDF spec for information)private voidbeginMarkedContent(PdfName tag, PdfDictionary dict)Add to the marked content stackprivate voidbeginText()Used to trigger beginTextBlock on the renderListenerprivate voidclipPath(int rule)private voiddisplayPdfString(PdfString string)Displays text.private voiddisplayXObject(PdfName xobjectName)Displays an XObject using the registered handler for this XObject's subtypeprivate voidendMarkedContent()Remove the latest marked content from the stack.private voidendText()Used to trigger endTextBlock on the renderListenerprivate static BaseColorgetColor(int nOperands, java.util.List<PdfObject> operands)Gets a color based on a list of operands.private static BaseColorgetColor(PdfName colorSpace, java.util.List<PdfObject> operands)Gets a color based on a list of operands.private CMapAwareDocumentFontgetFont(PdfDictionary fontResource)private CMapAwareDocumentFontgetFont(PRIndirectReference ind)Gets the font pointed to by the indirect reference.java.util.Collection<java.lang.String>getRegisteredOperatorStrings()RenderListenergetRenderListener()Accessor method for the RenderListener object maintained in this class.GraphicsStategs()Returns the current graphics state.protected voidhandleInlineImage(InlineImageInfo info, PdfDictionary colorSpaceDic)Callback when an inline image is found.private voidinvokeOperator(PdfLiteral operator, java.util.ArrayList<PdfObject> operands)Invokes an operator.private voidmodifyPath(int operation, java.util.List<java.lang.Float> segmentData)Modifies the current path.private voidpaintPath(int operation, int rule, boolean close)Displays the current path.private voidpopulateOperators()Loads all the supported graphics and text state operators in a map.private voidpopulateXObjectDoHandlers()voidprocessContent(byte[] contentBytes, PdfDictionary resources)Processes PDF syntax.ContentOperatorregisterContentOperator(java.lang.String operatorString, ContentOperator operator)Registers a content operator that will be called when the specified operator string is encountered during content processing.XObjectDoHandlerregisterXObjectDoHandler(PdfName xobjectSubType, XObjectDoHandler handler)Registers a Do handler that will be called when Do for the provided XObject subtype is encountered during content processing.voidreset()Resets the graphics state stack, matrices and resources.
-
-
-
Field Detail
-
DEFAULTOPERATOR
public static final java.lang.String DEFAULTOPERATOR
Default operator- Since:
- 5.0.1
- See Also:
- Constant Field Values
-
operators
private final java.util.Map<java.lang.String,ContentOperator> operators
A map with all supported operators (PDF syntax).
-
resources
private PdfContentStreamProcessor.ResourceDictionary resources
Resources for the content stream.
-
gsStack
private final java.util.Stack<GraphicsState> gsStack
Stack keeping track of the graphics state.
-
textMatrix
private Matrix textMatrix
Text matrix.
-
textLineMatrix
private Matrix textLineMatrix
Text line matrix.
-
renderListener
private final RenderListener renderListener
Listener that will be notified of render events
-
xobjectDoHandlers
private final java.util.Map<PdfName,XObjectDoHandler> xobjectDoHandlers
A map with all supported XObject handlers
-
cachedFonts
private final java.util.Map<java.lang.Integer,java.lang.ref.WeakReference<CMapAwareDocumentFont>> cachedFonts
-
markedContentStack
private final java.util.Stack<MarkedContentInfo> markedContentStack
A stack containing marked content info.- Since:
- 5.0.2
-
-
Constructor Detail
-
PdfContentStreamProcessor
public PdfContentStreamProcessor(RenderListener renderListener)
Creates a new PDF Content Stream Processor that will send it's output to the designated render listener.- Parameters:
renderListener- theRenderListenerthat will receive rendering notifications
-
-
Method Detail
-
populateXObjectDoHandlers
private void populateXObjectDoHandlers()
-
registerXObjectDoHandler
public XObjectDoHandler registerXObjectDoHandler(PdfName xobjectSubType, XObjectDoHandler 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
- Since:
- 5.0.1
-
getFont
private CMapAwareDocumentFont getFont(PRIndirectReference ind)
Gets the font pointed to by the indirect reference. The font may have been cached.- Parameters:
ind- the indirect reference ponting to the font- Returns:
- the font
- Since:
- 5.0.6
-
getFont
private CMapAwareDocumentFont getFont(PdfDictionary fontResource)
-
populateOperators
private void populateOperators()
Loads all the supported graphics and text state operators in a map.
-
registerContentOperator
public ContentOperator registerContentOperator(java.lang.String operatorString, ContentOperator 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 DEFAULTOPERATOR for a catch-all operatoroperator- the operator that will receive notification when the operator is encountered- Returns:
- the existing registered operator, if any
- Since:
- 2.1.7
-
getRegisteredOperatorStrings
public java.util.Collection<java.lang.String> getRegisteredOperatorStrings()
- Returns:
Collectioncontaining all the registered operators strings- Since:
- 5.5.6
-
reset
public void reset()
Resets the graphics state stack, matrices and resources.
-
gs
public GraphicsState gs()
Returns the current graphics state.- Returns:
- the graphics state
-
invokeOperator
private void invokeOperator(PdfLiteral operator, java.util.ArrayList<PdfObject> operands) throws java.lang.Exception
Invokes an operator.- Parameters:
operator- the PDF Syntax of the operatoroperands- a list with operands- Throws:
java.lang.Exception
-
beginMarkedContent
private 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- Since:
- 5.0.2
-
endMarkedContent
private void endMarkedContent()
Remove the latest marked content from the stack. Keeps track of the BMC, BDC and EMC operators.- Since:
- 5.0.2
-
beginText
private void beginText()
Used to trigger beginTextBlock on the renderListener
-
endText
private void endText()
Used to trigger endTextBlock on the renderListener
-
displayPdfString
private void displayPdfString(PdfString string)
Displays text.- Parameters:
string- the text to display
-
displayXObject
private void displayXObject(PdfName xobjectName) throws java.io.IOException
Displays an XObject using the registered handler for this XObject's subtype- Parameters:
xobjectName- the name of the XObject to retrieve from the resource dictionary- Throws:
java.io.IOException
-
paintPath
private void paintPath(int operation, int rule, boolean close)Displays the current path.- Parameters:
operation- One of the possible combinations ofPathPaintingRenderInfo.STROKEandPathPaintingRenderInfo.FILLvalues orPathPaintingRenderInfo.NO_OPrule- EitherPathPaintingRenderInfo.NONZERO_WINDING_RULEorPathPaintingRenderInfo.EVEN_ODD_RULEIn case it isn't applicable pass anybytevalue.close- Indicates whether the path should be closed or not.- Since:
- 5.5.6
-
modifyPath
private void modifyPath(int operation, java.util.List<java.lang.Float> segmentData)Modifies the current path.- Parameters:
operation- Indicates which path-construction operation should be performed.segmentData- Contains x, y components of points of a new segment being added to the current path. E.g. x1 y1 x2 y2 x3 y3 etc. It's ignored for "close subpath" operarion (h).
-
clipPath
private void clipPath(int rule)
-
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
-
processContent
public void processContent(byte[] contentBytes, PdfDictionary resources)Processes PDF syntax. Note: If you re-use a givenPdfContentStreamProcessor, you must callreset()- Parameters:
contentBytes- the bytes of a content streamresources- the resources that come with the content stream
-
handleInlineImage
protected void handleInlineImage(InlineImageInfo info, PdfDictionary colorSpaceDic)
Callback when an inline image is found. This requires special handling because inline images don't follow the standard operator syntax- Parameters:
info- the inline imagecolorSpaceDic- the color space for the inline immage
-
getRenderListener
public RenderListener getRenderListener()
Accessor method for the RenderListener object maintained in this class. Necessary for implementing custom ContentOperator implementations.- Returns:
- the renderListener
-
getColor
private static BaseColor getColor(PdfName colorSpace, java.util.List<PdfObject> operands)
Gets a color based on a list of operands.
-
-