我尝试在适合矩形大小的矩形内绘制文本,例如我的 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
如何根据坐标渲染文本?因为我对文本和矩形边界使用相同的矩形框。
最佳答案
我不确定我是否正确理解了你的问题。我假设您想将一些文本垂直放入一个矩形中,但我不明白您是如何计算字体大小的,而且我没有看到您在任何地方设置前导(您可以通过使用 ColumnText 来避免这种情况.showAligned()
).
我创建了一个名为 FitTextInRectangle
的示例这导致 PDF chunk_in_rectangle.pdf .由于舍入因素(我们正在使用 float
值),单词 test 略微超出了矩形,但代码显示了如何计算使文本或多或少适合矩形的字体大小.
在您的代码示例中,基线由使用 ColumnText
时的前导定义(而前导是错误的)或使用 showText()
时矩形的底部坐标>(并且您忘记考虑下降器的值)。
关于java - 更正矩形iText中的文本位置中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20909450/