2

我正在基于 itextpdf 中的 PdfPTable 创建一个带有网格表的 pdf 文档。输入数据以 java String[][] 的形式到达,所有单元格都已填充。对于每一列,我遍历所有行以确定显示该列数据所需的最大列。这成为列宽。将所有列宽相加以确定整个表的最大列数。在这一点上,我的意图是计算等宽字体的最佳点大小以完全占据列的宽度。目标是在面对非常动态的输入数据时具有最大的可读性。对于宽列,我最终会得到很多尾随空格,而不是从左到右很好地填充列。列内的左对齐外观是可取的。运行环境是 RHEL5.X 上的 openjdk-1.6.0。

代码已完全启动并运行,但如果列文本完全占据列字段,则外观可能会更好。

4

2 回答 2

3

你的问题我看了三遍,还是没看懂。

让我试着改写一下:给定一个可用的宽度,我如何定义一段文本的字体大小,使其与可用宽度匹配。

首先你需要一个BaseFont对象。例如:

BaseFont bf = BaseFont.createFont(BaseFont.COURIER, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED);

现在您可以在“规范化 1000 单位”中询问基本字体的此字符串的宽度(这些是“字形空间”中使用的单位;有关更多信息,请参阅 ISO-32000-1):

float glyphWidth = bf.getWidth("WHAT IS THE WIDTH OF THIS STRING?");

现在我们可以将这些“标准化的 1000 单位”转换为以磅为单位的实际大小(实际上是用户单位,但为了简单起见,我们假设 1 个用户单位 = 1 pt)。

例如:文本的宽度“这个字符串的宽度是多少?” 当使用大小为 16pt 的 Courier 时:

 float width = glyphWidth * 0.001f * 16f;

你的问题是不同的:你想知道给定的字体大小width。这样做是这样的:

 float fontSize = 1000 * width / glyphwidth;

我希望这回答了你的问题。如果不是,请改写。

于 2013-04-12T11:05:10.780 回答
-1

简单使用遵循语法。

PdfPTable table = new PdfPTable(1);
table.setWidthPercentage(100);
table.addCell(new Phrase("Name", FontFactory.getFont(
                    FontFactory.HELVETICA, 8, Font.BOLD)));
于 2015-04-17T11:13:58.277 回答