我想知道我是否可以以某种方式将 MySQL 中的列标题文本转换为实际宽度大小的像素。我正在尝试从数据库生成 PDF,我希望它自动调整列宽。因为我将它用于许多表格,所以宽度必须不同,所以我应该能够看到它:“此列的标题称为 CompanyID,因此它的宽度应为 40”。我可以实现这样的目标吗?我可以将文本字符长度转换为实际宽度吗?
谢谢。
FPDF 恰好有一个GetStringWidth()方法可以预测字符串的宽度。
您需要有某种方法来计算将在 PDF 中使用的字体度量 - 您使用的是哪个 PDF 生成库?
虽然我强烈建议使用字符宽度相等的字体(也许是 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 处的元素即可获取所需的信息。希望我有所帮助。
我不确定这是否可能。我想最好的折衷方案是为字符选择任意宽度,然后将其乘以 mysql 字段名称的字符串长度。
如果我没有误解,这完全取决于您使用的字体,并且与存储在 MySQL 中的数据没有任何关系。您当然可以想出一种近似它的方法,但这在很大程度上取决于您使用的字体的功能。例如,字体是等宽的吗?如果不是,则名为“llllll”的列将比名为“MMMMMM”的列薄得多,即使它们的字符数相同。
您需要一个函数来计算字符串的宽度,给定(如 Mike Houston 所说)它将呈现的字体(面、大小等)。这与 MySQL 无关,与打印/渲染文本,因此请查看您的 PDF 库。或者,可能是您操作系统的打印/图形库。