在矩形iText中更正文本位置中心

时间:2014-01-03 17:35:04

标签: java itext

我尝试在矩形内部绘制符合矩形大小的文本,就像我的previous question一样,我希望文本对齐矩形中心。
问题是显示文字有错误的Y坐标,如下所示:
enter image description here
这是我的代码:

    PdfContentByte cb = writer.getDirectContent();

        Rectangle rect = new Rectangle(100, 150, 100 + 120, 150 + 50);
        cb.saveState();
        ColumnText ct = new ColumnText(writer.getDirectContent());
        Font font = new Font(BaseFont.createFont());
        float maxFontSize;
        // try to get max font size that fit in rectangle
        font.setSize(maxFontSize);
        ct.setText(new Phrase("test", font));           
        ct.setSimpleColumn(rect.getLeft(), rect.getBottom(), rect.getRight(), rect.getTop());
        ct.go();        

        // draw the rect
        cb.setColorStroke(BaseColor.BLUE);
        cb.rectangle(rect.getLeft(), rect.getBottom(), rect.getWidth(), rect.getHeight());
        cb.stroke();
        cb.restoreState();

我甚至画这样的文字:

        cb.saveState();
        cb.beginText();
        cb.moveText(rect.getLeft(), rect.getBottom());       
        cb.setFontAndSize(BaseFont.createFont(), maxSize);
        cb.showText("test");
        cb.endText();
        cb.setColorStroke(BaseColor.BLUE);
        cb.rectangle(rect.getLeft(), rect.getBottom(), rect.getWidth(), rect.getHeight());
        cb.stroke();

得到了结果:
enter image description here

所以我想知道itext如何根据坐标呈现文字?因为我使用相同的矩形框架进行文本和矩形绑定。

1 个答案:

答案 0 :(得分:3)

我不确定我是否理解你的问题。我假设您想要将一些文本垂直放入一个矩形,但我不明白你如何计算字体大小,我没有看到你在任何地方设置领先(你可以使用{{1}来避免})。

我创建了一个名为FitTextInRectangle的示例,该示例生成了PDF chunk_in_rectangle.pdf。由于舍入因子(我们使用ColumnText.showAligned()值),单词test略超过矩形,但代码显示了如何计算字体大小,使文本在矩形内或多或少适合。

在您的代码示例中,当使用float(并且前导错误)或使用ColumnText时矩形的底部坐标时,基线由前导定义(并且您忘记了下降者的账户价值。)