Itextpdf 如何为字体选择最佳大小?

Itextpdf 如何为字体选择最佳大小?,itextpdf,Itextpdf,我正在创建一个pdf文档,其中包含一个基于itextpdf中PdfPTable的网格表。输入数据以java字符串[][]的形式到达,并填充所有单元格。对于每个列,我遍历所有行,以确定显示该列数据所需的最大列数。这将成为列宽。所有列宽相加,以确定整个表的最大列数。在这一点上,我的目的是计算单空格字体完全占据列宽度的最佳点大小。目标是在面对非常动态的输入数据时实现最大的可读性。对于宽列,我将使用大量的尾随空格,而不是从左到右很好地填充列。柱内的左对齐外观是理想的。运行时环境是RHEL5.X上的ope

我正在创建一个pdf文档,其中包含一个基于itextpdf中PdfPTable的网格表。输入数据以java字符串[][]的形式到达,并填充所有单元格。对于每个列,我遍历所有行,以确定显示该列数据所需的最大列数。这将成为列宽。所有列宽相加,以确定整个表的最大列数。在这一点上,我的目的是计算单空格字体完全占据列宽度的最佳点大小。目标是在面对非常动态的输入数据时实现最大的可读性。对于宽列,我将使用大量的尾随空格,而不是从左到右很好地填充列。柱内的左对齐外观是理想的。运行时环境是RHEL5.X上的openjdk-1.6.0。任何正在使用的字体都必须驻留在系统上,因为它没有外部连接

代码已经完全启动并运行,但是如果列文本
你的问题我已经读了三遍了,我不明白

让我试着重新表述一下:给定某个可用宽度,如何定义文本片段的字体大小,使其与可用宽度匹配

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

BaseFont bf = BaseFont.createFont(BaseFont.COURIER, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED);
现在,您可以用“标准化1000个单位”(这些单位在“字形空间”中使用;有关更多信息,请参阅ISO-32000-1)向基本字体询问此字符串的宽度:

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

例如:使用尺寸为16pt的Courier时,文本“此字符串的宽度是多少?”的宽度为:

 float width = glyphWidth * 0.001f * 16f;
您的问题不同:您想知道给定
宽度的字体大小。就是这样做的:

 float fontSize = 1000 * width / glyphwidth;

我希望这能回答你的问题。如果没有,请重新措辞。

简单使用以下语法

PdfPTable table = new PdfPTable(1);
table.setWidthPercentage(100);
table.addCell(new Phrase("Name", FontFactory.getFont(
                    FontFactory.HELVETICA, 8, Font.BOLD)));

字形宽度是我计算中未包含的特征。我将插入该更改,看看它是否解决了问题。谢谢你的快速回复。不高兴。示例案例:1行表,5列,值插入addCell(“一”)、addCell(“两”)…addCell(“五”)。设置为插入字符串长度的每列的整数列宽。表格宽度设置为页面宽度。文本在每个表列中显示为左对齐,右侧有大量空间。必须执行什么操作才能使值从左到右完全填充该列?“整数列宽设置为插入字符串的长度”=可能错误,因为您设置的是相对宽度,而不是绝对宽度!你读过我书的第四章吗?“表格宽度设置为页面宽度”=为什么要这样做?为什么不设置为所有列的宽度之和?此外,如果设置列的绝对宽度而不是相对宽度,则不需要设置表的宽度。我确实读过你的书,但我有一个非常紧迫的截止日期。我错过了一些细节。再次感谢您的见解。这有助于从库的作者那里得到反馈:-)错误的示例,没有对齐是这种情况
PdfPTable table = new PdfPTable(1);
table.setWidthPercentage(100);
table.addCell(new Phrase("Name", FontFactory.getFont(
                    FontFactory.HELVETICA, 8, Font.BOLD)));