我有一个动态创建报告的项目。列数可能会改变,所以我想出了一个表来帮助我确定要使用的纸张尺寸。字体大小和页面大小下降。相交数字是列数。我想选择最大字体和最小纸张尺寸的组合。有没有一种简单的方法来确定这种组合?任何帮助总是受到赞赏。
修改
这是表格的副本。
我一直绞尽脑汁试图想出一个解决方案,但我甚至不知道从哪里开始。创建报告时,确切的列数可能与表中列出的列不同,但我想选择表中列出的下一个更大的数字。
答案 0 :(得分:1)
这是多解决方案的多变量问题。可以清楚地看到,对于某些数量的列(例如,13,16)没有唯一的解决方案。
因此,它取决于您更重视哪个 - 更大的字体大小或更小的纸张尺寸。
即。目前还不清楚你的目标变量是什么。
您可以根据以下内容为组合创建某种索引或得分:
所以,作为一个例子
然后,您可以通过某种方式组合这些分数以产生结果。
如何将这些分数合并到最重要的分数。让 p 保存纸张, r 是可读性,您可以:
y = 5p + 2x
这样可以节省纸张,而不是2/5的可读性,或者你可以:
y = e^p + e^x
因此它们的权重相同,但是呈指数级,这意味着大纸上的大字体比中等纸张上的中等字体要好。
一旦确定了可以满足最低需求的最低得分的组合,那么您可以选择正确的组合。
答案 1 :(得分:0)
我提出了以下解决方案,但我想知道是否有更有效的方法来做同样的事情。
我颠倒了上面显示的字体顺序,并使用了以下代码。
// Example number of columns
$NumColumns = 15;
//
$PageFont[0][0] = 7;
$PageFont[0][1] = 8;
$PageFont[0][2] = 8;
$PageFont[0][3] = 9;
$PageFont[1][0] = 10;
$PageFont[1][1] = 11;
$PageFont[1][2] = 12;
$PageFont[1][3] = 13;
$PageFont[2][0] = 13;
$PageFont[2][1] = 14;
$PageFont[2][2] = 15;
$PageFont[2][3] = 16;
$PageFont[3][0] = 16;
$PageFont[3][1] = 17;
$PageFont[3][2] = 19;
$PageFont[3][3] = 20;
$Font = NULL;
$Page = NULL;
// $x = Page Size
// $y = Font Size
for($x=0;$x<4;++$x) {
for($y=0;$y<4;++$y) {
if($PageFont[$x][$y] >= $NumColumns) {
$Page = $x;
$Font = $y;
break;
}
}
}