【问题标题】:Get MySQL columns width?获取 MySQL 列的宽度?
【发布时间】:2010-10-04 01:42:49
【问题描述】:

我想知道是否可以以某种方式将 MySQL 中的列标题文本转换为实际宽度大小的像素。我正在尝试从数据库生成 PDF,我希望它自动调整列宽。因为我将它用于许多表,所以宽度必须不同,所以我应该能够看到它:“该列的标题称为 CompanyID,因此它的宽度应为 40”。我可以实现这样的目标吗?我可以将文本字符长度转换为实际宽度吗?

谢谢。

【问题讨论】:

  • 这与 SQL 无关 - 这是一个以像素为单位确定文本大小的问题。有关类似问题,请参阅 stackoverflow.com/questions/162730/…
  • 您尝试使用哪种语言执行上述任务? php 我假设?
  • 感谢您的回复。我正在使用 FPDF 库。字体设置如下: $this->SetFont('Arial','',12);我需要想出一个简单的方法来做到这一点。我会根据大型数据集生成 PDF。所以我不想为这个转换花费太多资源......
  • 问题 /is/ 用术语“php”标记... :)
  • 正如我所建议的,PHP 的 imagettfbbox() 应该可以为您解决问题;它返回文本周围虚构“框”的坐标。从这一点开始,宽度就可以被提取出来了。

标签: php pdf text width


【解决方案1】:

FPDF 恰好有一个 GetStringWidth() 方法可以预测字符串的宽度。

【讨论】:

    【解决方案2】:

    虽然我强烈建议使用字符宽度相等的字体(也许是 Courier New),然后将字符串长度乘以您确定的一个字符的宽度,但您可以 使用一些服务器端代码来解决问题。从这里开始,我将使用 PHP 进行演讲。 :)

    假设你可以访问GD库,你可以使用imagettfbbox()函数返回字符串边界框的坐标;下面是一个例子:

    <?php
    $size = 15;
    $angle = 0;
    $path = 'name_of_font.ttf';
    $bounding = imagettfbbox($size, $angle, $path, "This is some text.");
    
    // $bounding is now an array of values that contain
    // information regarding the invisible "box" around
    // the text; the only element you're really interested
    // in, though, the one that will tell you the width of
    // the text, is $bounding[2]
    ?>
    

    因此,每当您需要推断字符串的宽度时,只需调用此函数并使用结果数组的索引 2 处的元素即可获得所需的信息。希望我有所帮助。

    【讨论】:

      【解决方案3】:

      你需要一个函数来计算字符串的宽度,给定(正如 Mike Houston 所说)它将被渲染的字体(面、大小等)。这与 MySQL 无关,一切都要做带有打印/渲染文本,因此请查看您的 PDF 库。或者,可能是您操作系统的打印/图形库。

      【讨论】:

        【解决方案4】:

        如果我没有误解,这完全取决于您使用的字体,而这与存储在 MySQL 中的数据没有任何关系。您当然可以想出一种近似它的方法,但这在很大程度上取决于您使用的字体的功能。例如,字体是等宽的吗?如果不是,则名为“llllll”的列将比名为“MMMMMM”的列薄得多,即使它们的字符数相同。

        【讨论】:

          【解决方案5】:

          您需要某种方法来计算将在 PDF 中使用的字体度量 - 您使用的是哪个 PDF 生成库?

          【讨论】:

            【解决方案6】:

            我不确定这是否可能。我想最好的折衷方案是为字符选择任意宽度,然后将其乘以 mysql 字段名称的字符串长度。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-04-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-01-24
              • 1970-01-01
              相关资源
              最近更新 更多