How to truncate text within a bounding box?
How can I stop the text from overflowing a given region when writing?
I am writing content to a PdfContentByte
object directly using:
PdfContentByte.showTextAligned();
I'd like to know how I can stop the text overflowing a given region when writing. If possible it would be great if iText could also place an ellipsis character where the text does not fit. I can't find any method on ColumnText
that will help either. I do not wish the content to wrap when writing.
Posted on StackOverflow on Nov 26, 2012 by Brett Ryan
Please take a look at the TrucateTextInCell example. It shows how to solve your problem using iText 7. We override the layout()
method in CellRenderer
class and it will be triggered every time a Cell
is added on which we used the setNextRenderer()
method.
public LayoutResult layout(LayoutContext layoutContext) {
PdfFont bf = getPropertyAsFont(Property.FONT);
float availableWidth = layoutContext.getArea().getBBox().getWidth();
int contentLength = content.length();
int leftChar = 0;
int rightChar = contentLength - 1;
availableWidth -= bf.getWidth("...", 12);
while (leftChar 0)
leftChar++;
else
break;
availableWidth -= bf.getWidth(content.charAt(rightChar), 12);
if (availableWidth > 0)
rightChar--;
else
break;
}
String newContent = content.substring(0, leftChar) + "..." + content.substring(rightChar);
Paragraph p = new Paragraph(newContent);
IRenderer pr = p.createRendererSubTree().setParent(this);
this.childRenderers.add(pr);
return super.layout(layoutContext);
}
Here it is! If you apply this renderer for a single cell (let it be D2), see what happens:
We can get the occupied area using layoutContext.getArea().getBBox()
method and customize the piece of text we want to appear depending on the font size (12 in this example).
Click How to truncate text within a bounding box? if you want to see how to answer this question in iText 5.