【发布时间】:2020-01-15 07:53:23
【问题描述】:
以粗体编辑
我有一个表格,其中几个单元格包含 Paragraphs 和一些任意长的文本。 表格宽度是通过useAllAvailableWidth确定的,我也在调用setAutoLayout。
我正在使用Renderer 框架将Paragraph 的字体大小设置为尽可能大的值,而不会剪掉任何内容。
我特别希望获得与iText Maximum Font Size 类似的结果,但是这些问题是为 itext5 编写的。我正在使用 itext7。
我已阅读this sample,由于之前的回答,我提出了以下(部分)解决方案:
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。完整的代码示例可以在this repository、webscrambles/src/main/kotlin/org/worldcubeassociation/tnoodle/server/webscrambles/pdf、文件FmcSolutionSheet.kt 和util/FooRenderer.kt 下查看(和下载)。
如何调整我的Renderer 以防止单元格溢出?
【问题讨论】: