【问题标题】:How to choose the optimal size for a font?如何选择字体的最佳大小?
【发布时间】:2015-12-21 21:16:28
【问题描述】:

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

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

【问题讨论】:

    标签: itextpdf


    【解决方案1】:

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

    让我试着改写一下:给定一个可用的宽度,我如何定义一个 sn-p 文本的字体大小,以便它与可用的宽度相匹配。

    首先你需要一个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;
    

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

    【讨论】:

    • 字形宽度是我计算中未包含的特征。我将插入该更改以查看它是否解决了问题。感谢您的快速回复。
    • 不高兴。示例案例:1 行表,5 列,使用 addCell("One")、addCell("Two")...addCell("Five") 插入的值。每列的整数列宽设置为插入字符串的长度。表格宽度设置为页面的宽度。文本显示在每个表格列中左对齐,右侧有很多空间。必须做什么才能使值从左到右完全填充列?
    • "整数列宽设置为插入字符串的长度" = 可能是错误的,因为您设置的是相对宽度,而不是绝对宽度!你读过我的书的第 4 章吗? “表格宽度设置为页面宽度” = 你为什么这样做?为什么不设置为所有列的宽度之和?而且,如果设置列的绝对宽度而不是相对宽度,则不需要设置表格的宽度。
    • 我确实读过你的书,但我的截止日期非常紧迫。我错过了一些细节。再次感谢您的见解。从图书馆的作者那里获得反馈会有所帮助:-)
    【解决方案2】:

    简单的使用跟随语法。

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

    【讨论】:

    • 样本错误,这种情况没有对齐
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    • 2011-12-18
    • 2015-10-12
    • 2013-06-29
    • 2017-08-12
    • 1970-01-01
    • 2015-10-19
    相关资源
    最近更新 更多