我正在使用基于itextpdf中的PdfPTable的网格表创建一个pdf文档。输入数据作为java String [] []到达,所有单元格都已填充。对于每一列,我遍历所有行以标识显示该列数据所需的最大列。这成为列宽。将所有列宽相加以确定整个表的最大列数。此时,我的目的是计算等宽字体的最佳点大小,以完全占据列的宽度。目标是在非常动态的输入数据面前实现最大可读性。对于宽列,我最终会有大量的尾随空格,而不是从左到右很好地填充列。列内的左对齐外观是可取的。 RHEL5.X上的运行时环境是openjdk-1.6.0。使用中的任何字体必须驻留在系统上,因为它没有外部连接。
代码已完全启动并运行,但如果列文本外观可能会更好 完全占据了列fieids。
答案 0 :(得分:2)
我已经三次阅读你的问题了,我不明白。
让我试着改写一下:给定一定的可用宽度,如何定义一段文字的字体大小,使其与可用宽度相匹配。
首先,您需要一个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磅)。
例如:文本的宽度“这条弦的宽度是什么?”当使用大小为16pt的Courier时:
float width = glyphWidth * 0.001f * 16f;
您的问题不同:您想知道给定width
的字体大小。这是这样做的:
float fontSize = 1000 * width / glyphwidth;
我希望这能回答你的问题。如果没有,请改写。
答案 1 :(得分:0)
简单使用遵循语法。
PdfPTable table = new PdfPTable(1);
table.setWidthPercentage(100);
table.addCell(new Phrase("Name", FontFactory.getFont(
FontFactory.HELVETICA, 8, Font.BOLD)));