未在 Android PdfDocument canvas 上绘制矩形

Rect not being drawn on Android PdfDocument canvas

由于缺少 how to print iText documents.

的文档,我刚从使用 iText 切换到原生 android PdfDocument

我正在尝试在 Canvas 上绘制 table,方法是遍历列表并为每个项目添加左右列,使用 Rect[ 表示=20=]

负责绘制table行的函数如下所示:

fun drawTableRow(canvas: Canvas, question: Document.H) {
            val textBounds = Rect()

            var cellHeight = if(question.value.isNullOrEmpty()) {
                20f
            } else {
                paint.getTextBounds(question.value, 0, question.value!!.length, textBounds)
                textBounds.height().toFloat()
            }
            if(cellHeight <= 20f) cellHeight = 20f

            paint.textAlign = Paint.Align.LEFT

            val top = yPointer
            val right = (width.toFloat() - (pageMargin * 2)) / 3
            val bottom = height - (yPointer + cellHeight + pageMargin)

            val leftCell = RectF(pageMargin, top, right, bottom)
            val rightCell = RectF(leftCell.right, top, pageMargin, bottom)

            var textY = yPointer + yPadding

            canvas.drawRect(rightCell, contentBgPaint)
            canvas.drawRect(leftCell, contentBgPaint)

            canvas.drawText(question.h.hQuestion.title, 0, question.h.hQuestion.title.length, pageMargin, textY, paint)
            canvas.drawText(question.h.hQuestion.subtitle, 0, question.h.hQuestion.subtitle.length, pageMargin, textY + 16f, paint)
            canvas.drawText(question.value!!, 0, question.value!!.length, leftCell.right, textY, paint)

            yPointer += cellHeight.toInt()
        }

并且当 运行 调试器时,Rect 坐标似乎设置正确。

但是,出现了一种常见的行为 - 要​​么只绘制了一个矩形,要么这些矩形彼此完全重叠,尽管坐标不同。

因为如果我尝试只绘制右边的矩形,它仍然会出现在文档的左侧,与左边矩形的比例完全一致,如下图所示。

这是一个愚蠢的错误。 The documentation for RectF 明确指出左 <= 右和上 <= 下。调试器清楚地显示右侧单元格的左侧值 > 右侧。

我在右侧的单元格中将 pageMargin 替换为 width.toFloat() - pageMargin,这解决了问题。