java - 更正矩形iText中的文本位置中心

标签 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 如何根据坐标渲染文本?因为我对文本和矩形边界使用相同的矩形框。

最佳答案

我不确定我是否正确理解了你的问题。我假设您想将一些文本垂直放入一个矩形中,但我不明白您是如何计算字体大小的,而且我没有看到您在任何地方设置前导(您可以通过使用 ColumnText 来避免这种情况.showAligned()).

我创建了一个名为 FitTextInRectangle 的示例这导致 PDF chunk_in_rectangle.pdf .由于舍入因素(我们正在使用 float 值),单词 test 略微超出了矩形,但代码显示了如何计算使文本或多或少适合矩形的字体大小.

在您的代码示例中,基线由使用 ColumnText 时的前导定义(而前导是错误的)或使用 showText() 时矩形的底部坐标>(并且您忘记考虑下降器的值)。

关于java - 更正矩形iText中的文本位置中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20909450/

相关文章:

java - 如何使用 iText 将文本插入点跳过到下一列?

java - 如何使用 Java 将 HTML 内容转换为 PDF 而不会丢失格式?

java - 有没有办法通过知道相对于java中文本节点的索引来查找xml中的特定位置?

java - Spring-Jdbc模板和Prepared语句

java - 使用 Java (Jackson) 读取 JSON 中嵌套键的值

c# - 使用 itextsharp 将页面插入现有 PDF

c# - iTextSharp PDF 使用表格嵌入条码。无法格式化为一页

java - 如何在使用 itext 从 HTML 创建 pdf 时自定义字体样式

java和正则表达式: how to match a string with lithreal parenthesis?

java - Android在使用捏缩放和临时图像调整文本大小时限制大小