我尝试在矩形内部绘制符合矩形大小的文本,就像我的previous question一样,我希望文本对齐矩形中心。
问题是显示文字有错误的Y坐标,如下所示:
这是我的代码:
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();
得到了结果:
所以我想知道itext
如何根据坐标呈现文字?因为我使用相同的矩形框架进行文本和矩形绑定。
答案 0 :(得分:3)
我不确定我是否理解你的问题。我假设您想要将一些文本垂直放入一个矩形,但我不明白你如何计算字体大小,我没有看到你在任何地方设置领先(你可以使用{{1}来避免})。
我创建了一个名为FitTextInRectangle
的示例,该示例生成了PDF chunk_in_rectangle.pdf。由于舍入因子(我们使用ColumnText.showAligned()
值),单词test略超过矩形,但代码显示了如何计算字体大小,使文本在矩形内或多或少适合。
在您的代码示例中,当使用float
(并且前导错误)或使用ColumnText
时矩形的底部坐标时,基线由前导定义(并且您忘记了下降者的账户价值。)