gpt4 book ai didi

java - 在矩形 pdfbox 内垂直居中

转载 作者:行者123 更新时间:2023-12-02 03:58:18 30 4
gpt4 key购买 nike

我试图将文本垂直居中在一个矩形内,但它总是偏离一点点。

使用的字体是 Helvetica,字体大小设置为 12,我将字母上方和下方的填充设置为 6 磅,将矩形的大小设置为 24 磅。

用于写入单元格的代码如下,图像显示单元格垂直不居中。

Uncentered cells

public void drawCell(PDPageContentStream owningStream, float xOffset, float yOffset) throws IOException {
float cellHeightSpacing = fontSize / 2;
float height = yOffset - fontSize - cellHeightSpacing;
if (isContentLargerThanCell()) {
if (maxLines < 2)
return;

} else {
float x = xOffset+getAlignedX(" "+content+" ");
drawContent(owningStream," "+content+" ",x,height);
}
drawCellBoundaries(owningStream, xOffset, yOffset - 2 * fontSize, 2 * fontSize);
}

private void drawCellBoundaries(PDPageContentStream owniContentStream, float X, float startHeight, float sizeHeight) throws IOException {
owniContentStream.addRect(X, startHeight, width, sizeHeight);
owniContentStream.stroke()
}

最佳答案

您实际上有两个问题需要处理:

  • 对于给定的字体大小 fs,几乎没有任何字母实际上具有 fs 的高度,通常短字母序列也没有。

    您的代码假设它必须将高度为 fs 的内容垂直居中,但您使用大写字母,而基线下方没有任何部分,因此它们的高度远小于 fs>.

  • 用于绘制文本的 y 坐标是基线的高度,而不是所有文本底部的高度。

    例如看看这封信

    g

    如果您在某个坐标xy处绘制此字母,则其下行部分甚至会绘制在低于您的y 高度,而您的代码假设整个字母位于 yy + fs 之间居中。

<小时/>

前一个问题很可能仍然存在。如果您垂直居中以确保字母的精确外观,则相邻单元格可能会出现跳跃的基线,这看起来比一定程度的偏离中心更糟糕。

你的主要问题是后一个,你可以通过增加文本绘制的高度(或降低边界绘制的高度)fs倍最大下降绝对值来解决字体。

您可以从字体的字体描述符 (PDFontDescriptor.getDescent()) 或字体的边界框 (PDFont.getBoundingBox()) 检索字体下降

>

关于java - 在矩形 pdfbox 内垂直居中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35207460/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com