РЕДАКТИРОВАТЬ жирным шрифтом
У меня есть таблица, в которой несколько ячеек содержат Paragraph
s с произвольно длинным текстом. Ширина таблицы определяется с помощью useAllAvailableWidth
, и я также вызываю setAutoLayout
.
Я использую инфраструктуру Renderer
, чтобы установить размер шрифта Paragraph
в максимально возможное значение без обрезания содержимого.
В частности, я sh достигну результатов, аналогичных Максимальный размер шрифта iText , однако эти вопросы были написаны для itext5. Я использую itext7 .
Я прочитал этот образец , , и я нашел следующее (частичное) решение благодаря предыдущему ответу:
class FontSizeRenderer(val content: Paragraph) : ParagraphRenderer(content) {
override fun getNextRenderer() = FontSizeRenderer(content)
override fun layout(layoutContext: LayoutContext?): LayoutResult {
val currentFontSize = content.getProperty<UnitValue>(Property.FONT_SIZE).value
return layoutBinarySearch(layoutContext, 1f, currentFontSize, 20)
}
private tailrec fun layoutBinarySearch(layoutContext: LayoutContext?, minFontSize: Float, maxFontSize: Float, iterationThreshold: Int): LayoutResult {
val currentLayout = super.layout(layoutContext)
if (iterationThreshold <= 0) {
return currentLayout
}
val currentFontSize = content.getProperty<UnitValue>(Property.FONT_SIZE).value
return if (currentLayout.status == LayoutResult.FULL) {
val increment = (currentFontSize + maxFontSize) / 2
content.setFontSize(increment)
layoutBinarySearch(layoutContext, currentFontSize, maxFontSize, iterationThreshold - 1)
} else {
val decrement = (minFontSize + currentFontSize) / 2
content.setFontSize(decrement)
layoutBinarySearch(layoutContext, minFontSize, currentFontSize, iterationThreshold - 1)
}
}
}
При использовании этого рендерера в полноценной таблице он «работает» в том смысле, что начинает повторяться, но останавливается слишком рано.
Ожидаемая строка вывода в нижней ячейке на первой странице - Scramble: R' U' F R F2 D2 R' B2 U2 R F2 R' B2 R' B F U' L2 B' R' B' U' R F2 R' U' F
. Полный пример кода может быть проверен (и загружен) в этого хранилища , в webscrambles/src/main/kotlin/org/worldcubeassociation/tnoodle/server/webscrambles/pdf
, файлах FmcSolutionSheet.kt
и util/FooRenderer.kt
.
Как мне настроить Renderer
чтобы предотвратить переполнение ячейки?