{
cb.setTextMatrix(x1 + translateX, y);
}
final OutputProcessorMetaData metaData = getMetaData();
final GlyphList gs = renderableText.getGlyphs();
final int offset = renderableText.getOffset();
final CodePointBuffer codePointBuffer = getCodePointBuffer();
if (metaData.isFeatureSupported(OutputProcessorFeature.FAST_FONTRENDERING) &&
isNormalTextSpacing(renderableText))
{
final int maxLength = computeMaximumTextSize(renderableText, contentX2);
final String text = gs.getText(renderableText.getOffset(), maxLength, codePointBuffer);
cb.showText(text);
}
else
{
final PdfTextArray textArray = new PdfTextArray();
final StringBuffer buffer = new StringBuffer(gs.getSize());
final int maxPos = offset + computeMaximumTextSize(renderableText, contentX2);
for (int i = offset; i < maxPos; i++)
{
final Glyph g = gs.getGlyph(i);
final Spacing spacing = g.getSpacing();
if (i != offset)
{
final int optimum = spacing.getOptimum();
if (optimum != 0)
{
textArray.add(buffer.toString());
textArray.add(-optimum / textSpec.getFontSize());
buffer.setLength(0);
}
}
final String text = gs.getGlyphAsString(i, codePointBuffer);
buffer.append(text);
}
if (buffer.length() > 0)
{
textArray.add(buffer.toString());