Package com.itextpdf.layout.renderer
Class LineRenderer
java.lang.Object
com.itextpdf.layout.renderer.AbstractRenderer
com.itextpdf.layout.renderer.LineRenderer
- All Implemented Interfaces:
IPropertyContainer
,IRenderer
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescription(package private) static class
(package private) static class
static class
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected byte[]
private static final org.slf4j.Logger
protected float
private float
private float
protected float
(package private) float
(package private) float
private static final float
Fields inherited from class com.itextpdf.layout.renderer.AbstractRenderer
BOTTOM_SIDE, childRenderers, EPS, flushed, INF, isLastRendererForModelElement, LEFT_SIDE, modelElement, occupiedArea, OVERLAP_EPSILON, parent, positionedRenderers, properties, RIGHT_SIDE, TOP_SIDE
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescription(package private) static void
adjustChildPositionsAfterReordering
(List<IRenderer> children, float initialXPos) protected LineRenderer
private void
private void
adjustLineOnFloatPlaced
(Rectangle layoutBox, int childPos, FloatPropertyValue kidFloatPropertyVal, Rectangle justPlacedFloatBox) protected void
applyLeading
(float deltaY) private BaseDirection
applyOtf()
Apply OTF features and return the last(!) base direction of child rendererprotected int
Returns the number of base characters, i.e.private float
calculateTab
(Rectangle layoutBox, float curWidth, TabStop tabStop, List<IRenderer> affectedRenderers, IRenderer tabRenderer) Calculates and sets tab size with the account of the element that is next in the line after the tab.private TabStop
calculateTab
(IRenderer childRenderer, float curWidth, float lineWidth) Calculates and sets encountered tab size.boolean
protected LineRenderer
protected LineRenderer
private float
decreaseRelativeWidthByChildAdditionalWidth
(IRenderer childRenderer, float normalizedChildWidth) (package private) float[]
getAscentDescentOfLayoutedChildRenderer
(IRenderer childRenderer, LayoutResult childResult, RenderingMode childRenderingMode, boolean isInlineBlockChild) Extracts ascender and descender of an already layoutedchildRenderer
.(package private) float
getBottomLeadingIndent
(Leading leading) protected Float
Gets the first yLine of the nested children recursively.private IRenderer
protected Float
float
getLeadingValue
(Leading leading) float
float
Calculates min and max width values for current renderer.Gets a new instance of this class to be used as a next renderer, after this renderer is used, ifIRenderer.layout(LayoutContext)
is called more than once.private TabStop
getNextTabStop
(float curWidth) protected int
(package private) float
getTopLeadingIndent
(Leading leading) float
getYLine()
(package private) boolean
private boolean
(package private) static boolean
isChildFloating
(IRenderer childRenderer) (package private) boolean
isForceOverflowForTextRendererPartialResult
(IRenderer childRenderer, boolean wasXOverflowChanged, OverflowPropertyValue oldXOverflow, LayoutContext layoutContext, Rectangle layoutBox, boolean wasParentsHeightClipped) Checks if the word that's been split when has been layouted on this line can fit the next line without splitting.(package private) static boolean
isInlineBlockChild
(IRenderer child) void
justify
(float width) layout
(LayoutContext layoutContext) This method simulates positioning of the renderer, including all of its children, and returns theLayoutResult
, representing the layout result, including occupied area, status, i.e.protected int
length()
Gets the total lengths of characters in this line.private void
processDefaultTab
(IRenderer tabRenderer, float curWidth, float lineWidth) (package private) static void
reorder
(LineRenderer toProcess, LineRenderer.LineSplitIntoGlyphsData splitLineIntoGlyphsResult, int[] newOrder) private void
replaceSplitRendererKidFloats
(Map<Integer, IRenderer> floatsToNextPageSplitRenderers, LineRenderer splitRenderer) private void
While resolving TextRenderer may split into several ones with different fonts.protected LineRenderer[]
split()
(package private) static LineRenderer.LineSplitIntoGlyphsData
splitLineIntoGlyphs
(LineRenderer toSplit) private LineRenderer[]
splitNotFittingFloat
(int childPos, LayoutResult childResult) toString()
Returns a string representation of the renderer.(package private) int
Trim first child text renderers.protected LineRenderer
trimLast()
(package private) void
updateAscentDescentAfterChildLayout
(float[] childAscentDescent, IRenderer childRenderer, boolean isChildFloating) UpdatemaxAscent
,maxDescent
,maxTextAscent
,maxTextDescent
,maxBlockAscent
andmaxBlockDescent
after child's layout.(package private) float[]
updateAscentDescentAfterTextRendererSequenceProcessing
(int newChildPos, LineRenderer.LineAscentDescentState lineAscentDescentStateBeforeTextRendererSequence, Map<Integer, float[]> textRendererSequenceAscentDescent) UpdatesmaxAscent
,maxDescent
,maxTextAscent
andmaxTextDescent
after aTextRenderer
sequence has been fully processed.private void
updateBidiLevels
(int totalNumberOfTrimmedGlyphs, BaseDirection baseDirection) private void
Methods inherited from class com.itextpdf.layout.renderer.AbstractRenderer
addAllChildRenderers, addAllChildRenderers, addAllProperties, addChild, addChildRenderer, alignChildHorizontally, allowLastYLineRecursiveExtraction, applyAbsolutePosition, applyAbsolutePositionIfNeeded, applyAction, applyBorderBox, applyBorderBox, applyDestination, applyDestinationsAndAnnotation, applyLinkAnnotation, applyMargins, applyMargins, applyMarginsBordersPaddings, applyPaddings, applyPaddings, applyRelativePositioningTranslation, beginElementOpacityApplying, beginTransformationIfApplied, calculateAbsolutePdfBBox, calculateAdditionalWidth, calculateBBox, calculatePaddingBorderHeight, calculatePaddingBorderWidth, calculateShiftToPositionBBoxOfPointsAt, clipBackgroundArea, clipBackgroundArea, clipBorderArea, createFontCharacteristics, createXObject, deleteOwnProperty, deleteProperty, draw, drawBackground, drawBorder, drawChildren, drawPositionedChildren, endElementOpacityApplying, endTransformationIfApplied, getAspectRatio, getBackgroundArea, getBorderAreaBBox, getBorderRadii, getBorders, getBorders, getChildRenderers, getDefaultProperty, getInnerAreaBBox, getMargins, getModelElement, getOccupiedArea, getOccupiedAreaBBox, getOwnProperties, getOwnProperty, getPaddings, getParent, getPdfDocument, getProperty, getProperty, getPropertyAsBoolean, getPropertyAsColor, getPropertyAsFloat, getPropertyAsFloat, getPropertyAsFloat, getPropertyAsFont, getPropertyAsInteger, getPropertyAsTransparentColor, getPropertyAsUnitValue, getPropertyAsUnitValue, getRootRenderer, hasAbsoluteUnitValue, hasAspectRatio, hasOwnOrModelProperty, hasOwnProperty, hasProperty, hasRelativeUnitValue, initElementAreas, isAbsolutePosition, isBorderBoxSizing, isFirstOnRootArea, isFirstOnRootArea, isFixedLayout, isFlushed, isKeepTogether, isKeepTogether, isNotFittingHeight, isNotFittingLayoutArea, isNotFittingWidth, isOverflowFit, isOverflowProperty, isOverflowProperty, isOverflowProperty, isPositioned, isRelativePosition, isStaticLayout, logWarningIfGetNextRendererNotOverridden, move, noAbsolutePositionInfo, preparePositionedRendererAndAreaForLayout, processWaitingDrawing, rectangleToPointsList, removeAllChildRenderers, removeChildRenderer, replaceOwnProperty, resolveFirstPdfFont, resolveFirstPdfFont, retrieveHeight, retrieveMaxHeight, retrieveMaxWidth, retrieveMinHeight, retrieveMinWidth, retrieveUnitValue, retrieveUnitValue, retrieveWidth, returnBackOwnProperty, setBorders, setChildRenderer, setChildRenderers, setMinMaxWidthBasedOnFixedWidth, setParent, setProperty, setThisAsParent, shrinkOccupiedAreaForAbsolutePosition, transformPoints, updateHeight, updateHeightsOnSplit, updateHeightsOnSplit, updateMaxHeight, updateMinHeight, updateWidth
-
Field Details
-
MIN_MAX_WIDTH_CORRECTION_EPS
private static final float MIN_MAX_WIDTH_CORRECTION_EPS- See Also:
-
logger
private static final org.slf4j.Logger logger -
maxAscent
protected float maxAscent -
maxDescent
protected float maxDescent -
levels
protected byte[] levels -
maxTextAscent
float maxTextAscent -
maxTextDescent
float maxTextDescent -
maxBlockAscent
private float maxBlockAscent -
maxBlockDescent
private float maxBlockDescent
-
-
Constructor Details
-
LineRenderer
public LineRenderer()
-
-
Method Details
-
layout
Description copied from interface:IRenderer
This method simulates positioning of the renderer, including all of its children, and returns theLayoutResult
, representing the layout result, including occupied area, status, i.e. if there was enough place to fit the renderer subtree, etc.LayoutResult
can be extended to return custom layout results for custom elements, e.g.TextRenderer
usesTextLayoutResult
as its result. This method can be called standalone to learn how much area the renderer subtree needs, or can be called beforeIRenderer.draw(DrawContext)
, to prepare the renderer to be flushed to the output stream.- Parameters:
layoutContext
- the description of layout area and any other additional information- Returns:
- result of the layout process
-
getMaxAscent
public float getMaxAscent() -
getMaxDescent
public float getMaxDescent() -
getYLine
public float getYLine() -
getLeadingValue
-
getNextRenderer
Description copied from interface:IRenderer
Gets a new instance of this class to be used as a next renderer, after this renderer is used, ifIRenderer.layout(LayoutContext)
is called more than once.- Returns:
- new renderer instance
-
getFirstYLineRecursively
Description copied from class:AbstractRenderer
Gets the first yLine of the nested children recursively. E.g. for a list, this will be the yLine of the first item (if the first item is indeed a paragraph). NOTE: this method will no go further than the first child.- Overrides:
getFirstYLineRecursively
in classAbstractRenderer
- Returns:
- the first yline of the nested children, null if there is no text found
-
getLastYLineRecursively
- Overrides:
getLastYLineRecursively
in classAbstractRenderer
-
justify
public void justify(float width) -
getNumberOfSpaces
protected int getNumberOfSpaces() -
length
protected int length()Gets the total lengths of characters in this line. Other elements (images, tables) are not taken into account.- Returns:
- the total lengths of characters in this line.
-
baseCharactersCount
protected int baseCharactersCount()Returns the number of base characters, i.e. non-mark characters- Returns:
- the number of base non-mark characters
-
toString
Description copied from class:AbstractRenderer
Returns a string representation of the renderer.- Overrides:
toString
in classAbstractRenderer
- Returns:
- a
String
- See Also:
-
createSplitRenderer
-
createOverflowRenderer
-
split
-
adjustChildrenYLine
-
applyLeading
protected void applyLeading(float deltaY) -
trimLast
-
containsImage
public boolean containsImage() -
getMinMaxWidth
Description copied from class:AbstractRenderer
Calculates min and max width values for current renderer.- Overrides:
getMinMaxWidth
in classAbstractRenderer
- Returns:
- instance of
MinMaxWidth
-
hasChildRendererInHtmlMode
boolean hasChildRendererInHtmlMode() -
getTopLeadingIndent
-
getBottomLeadingIndent
-
splitLineIntoGlyphs
-
reorder
static void reorder(LineRenderer toProcess, LineRenderer.LineSplitIntoGlyphsData splitLineIntoGlyphsResult, int[] newOrder) -
adjustChildPositionsAfterReordering
-
splitNotFittingFloat
-
adjustLineOnFloatPlaced
private void adjustLineOnFloatPlaced(Rectangle layoutBox, int childPos, FloatPropertyValue kidFloatPropertyVal, Rectangle justPlacedFloatBox) -
replaceSplitRendererKidFloats
private void replaceSplitRendererKidFloats(Map<Integer, IRenderer> floatsToNextPageSplitRenderers, LineRenderer splitRenderer) -
getLastNonFloatChildRenderer
-
getNextTabStop
-
calculateTab
Calculates and sets encountered tab size. Returns null, if processing is finished and layout can be performed for the tab renderer; otherwise, in case when the tab should be processed after the next element in the line, this method returns corresponding tab stop. -
calculateTab
private float calculateTab(Rectangle layoutBox, float curWidth, TabStop tabStop, List<IRenderer> affectedRenderers, IRenderer tabRenderer) Calculates and sets tab size with the account of the element that is next in the line after the tab. Returns resulting width of the tab. -
processDefaultTab
-
updateChildrenParent
private void updateChildrenParent() -
trimFirst
int trimFirst()Trim first child text renderers.- Returns:
- total number of trimmed glyphs.
-
applyOtf
Apply OTF features and return the last(!) base direction of child renderer- Returns:
- the last(!) base direction of child renderer.
-
isChildFloating
-
isInlineBlockChild
-
isForceOverflowForTextRendererPartialResult
boolean isForceOverflowForTextRendererPartialResult(IRenderer childRenderer, boolean wasXOverflowChanged, OverflowPropertyValue oldXOverflow, LayoutContext layoutContext, Rectangle layoutBox, boolean wasParentsHeightClipped) Checks if the word that's been split when has been layouted on this line can fit the next line without splitting.- Parameters:
childRenderer
- the childRenderer containing the split wordwasXOverflowChanged
- true ifProperty.OVERFLOW_X
has been changed during layouting ofLineRenderer
oldXOverflow
- the value ofProperty.OVERFLOW_X
before it's been changed during layouting ofLineRenderer
or null ifProperty.OVERFLOW_X
hasn't been changedlayoutContext
-LayoutContext
layoutBox
- current layoutBoxwasParentsHeightClipped
- true if layoutBox's height has been clipped- Returns:
- true if the split word can fit the next line without splitting
-
getAscentDescentOfLayoutedChildRenderer
float[] getAscentDescentOfLayoutedChildRenderer(IRenderer childRenderer, LayoutResult childResult, RenderingMode childRenderingMode, boolean isInlineBlockChild) Extracts ascender and descender of an already layoutedchildRenderer
.- Parameters:
childRenderer
- an already layouted child who's ascender and descender are to be extractedchildResult
-LayoutResult
of the childRenderer based on which ascender and descender are definedchildRenderingMode
-rendering mode
isInlineBlockChild
- true if childRendererisInlineBlockChild(IRenderer)
- Returns:
- a two-element float array where first element is ascender value and second element is descender value
-
updateAscentDescentAfterTextRendererSequenceProcessing
float[] updateAscentDescentAfterTextRendererSequenceProcessing(int newChildPos, LineRenderer.LineAscentDescentState lineAscentDescentStateBeforeTextRendererSequence, Map<Integer, float[]> textRendererSequenceAscentDescent) UpdatesmaxAscent
,maxDescent
,maxTextAscent
andmaxTextDescent
after aTextRenderer
sequence has been fully processed.- Parameters:
newChildPos
- position of the lastTextRenderer
child of the sequence to remain on the linelineAscentDescentStateBeforeTextRendererSequence
- aLineRenderer.LineAscentDescentState
containingLineRenderer
's maxAscent, maxDescent, maxTextAscent, maxTextDescent beforeTextRenderer
sequence starttextRendererSequenceAscentDescent
- aMap
withTextRenderer
children's positions as keys and float arrays consisting of maxAscent, maxDescent, maxTextAscent, maxTextDescent of the correspondingTextRenderer
children.- Returns:
- a two-element float array where first element is a new
LineRenderer
's ascender and second element is a newLineRenderer
's descender
-
updateAscentDescentAfterChildLayout
void updateAscentDescentAfterChildLayout(float[] childAscentDescent, IRenderer childRenderer, boolean isChildFloating) UpdatemaxAscent
,maxDescent
,maxTextAscent
,maxTextDescent
,maxBlockAscent
andmaxBlockDescent
after child's layout.- Parameters:
childAscentDescent
- a two-element float array where first element is ascender of a layouted child and second element is descender of a layouted childchildRenderer
- the layoutedchildRenderer
of currentLineRenderer
isChildFloating
- true ifisChildFloating(IRenderer)
-
updateBidiLevels
-
resolveChildrenFonts
private void resolveChildrenFonts()While resolving TextRenderer may split into several ones with different fonts. -
decreaseRelativeWidthByChildAdditionalWidth
private float decreaseRelativeWidthByChildAdditionalWidth(IRenderer childRenderer, float normalizedChildWidth) -
adjustChildrenYLineDefaultMode
private void adjustChildrenYLineDefaultMode() -
hasInlineBlocksWithVerticalAlignment
private boolean hasInlineBlocksWithVerticalAlignment()
-