我想不出这个系列的通用公式
I can't figure out general formula for this series
我已经编写了 php 代码来生成发票 pdf。首先打印所有购买产品的项目(required rows
),然后filler rows
(所以小计和总计总是打印在页尾),最后,小计和总计。经过几个小时的思考,我得出了以下逻辑。
我正在使用逻辑计算出额外的 "filler rows",这是根据 'required rows' 计算得出的。
这里的数字21
是总行数,第一页可以包含。其余页面可以包含 27 行。
if($required_rows < 21)
$filler_rows = 20 - $required_rows;
// I want a general formula for below series, which I currently use statically like this.
else if($required_rows < 48) // 21 + 27 = 48
$filler_rows = 24 - ($required_rows - 23 - (27*0));
else if($required_rows < 75) { // 48 + 27 = 75
$filler_rows = 24 - ($required_rows - 23 - (27*1));
} else if($required_rows < 102) { // 75 + 27 = 102
$filler_rows = 24 - ($required_rows - 23 - (27*2));
} else if($required_rows < 129) { // 102 + 27 = 129
$filler_rows = 24 - ($required_rows - 23 - (27*3));
} else if($required_rows < 156) { // 129 + 27 = 156
$filler_rows = 24 - ($required_rows - 23 - (27*4));
} else if($required_rows < 183) { // 156 + 27 = 183
$filler_rows = 24 - ($required_rows - 23 - (27*5));
} else if($required_rows < 210) { // 182 + 27 = 210
$filler_rows = 24 - ($required_rows - 23 - (27*6));
} else if($required_rows < 237) { // 210 + 27 = 237
$filler_rows = 24 - ($required_rows - 23 - (27*7));
} else if($required_rows < 264) { // 237 + 27 = 264
$filler_rows = 24 - ($required_rows - 23 - (27*8));
} else if($required_rows < 291) { // 264 + 27 = 291
$filler_rows = 24 - ($required_rows - 23 - (27*9));
} else if($required_rows < 318) { // 291 + 27 = 318
$filler_rows = 24 - ($required_rows - 23 - (27*10));
}
... ... ...
... ... ...
有什么想法吗?
请尝试下面的代码。
if($required_rows < 21)
$filler_rows = 20 - $required_rows;
}else{
$multiplier = ($required_rows -21)/27;
if($multiplier>=0){
$filler_rows = 24 - ($required_rows - 23 - (27*$multiplier));
}
}
很确定您正在寻找:
$filler_rows = 26 - ($required_rows - 21) % 27;
最好使用 Paul Crovella 的回答
$num = 21;
if($required_rows < 21)
$filler_rows = 20 - $required_rows;
else {
$i = 0;
while(true){
$num = $num + 27;
if($required_rows < $num) {
$filler_rows = 24 - ($required_rows - 23 - (27*$i));
break;
} else {
$i++;
}
}
}
我已经编写了 php 代码来生成发票 pdf。首先打印所有购买产品的项目(required rows
),然后filler rows
(所以小计和总计总是打印在页尾),最后,小计和总计。经过几个小时的思考,我得出了以下逻辑。
我正在使用逻辑计算出额外的 "filler rows",这是根据 'required rows' 计算得出的。
这里的数字21
是总行数,第一页可以包含。其余页面可以包含 27 行。
if($required_rows < 21)
$filler_rows = 20 - $required_rows;
// I want a general formula for below series, which I currently use statically like this.
else if($required_rows < 48) // 21 + 27 = 48
$filler_rows = 24 - ($required_rows - 23 - (27*0));
else if($required_rows < 75) { // 48 + 27 = 75
$filler_rows = 24 - ($required_rows - 23 - (27*1));
} else if($required_rows < 102) { // 75 + 27 = 102
$filler_rows = 24 - ($required_rows - 23 - (27*2));
} else if($required_rows < 129) { // 102 + 27 = 129
$filler_rows = 24 - ($required_rows - 23 - (27*3));
} else if($required_rows < 156) { // 129 + 27 = 156
$filler_rows = 24 - ($required_rows - 23 - (27*4));
} else if($required_rows < 183) { // 156 + 27 = 183
$filler_rows = 24 - ($required_rows - 23 - (27*5));
} else if($required_rows < 210) { // 182 + 27 = 210
$filler_rows = 24 - ($required_rows - 23 - (27*6));
} else if($required_rows < 237) { // 210 + 27 = 237
$filler_rows = 24 - ($required_rows - 23 - (27*7));
} else if($required_rows < 264) { // 237 + 27 = 264
$filler_rows = 24 - ($required_rows - 23 - (27*8));
} else if($required_rows < 291) { // 264 + 27 = 291
$filler_rows = 24 - ($required_rows - 23 - (27*9));
} else if($required_rows < 318) { // 291 + 27 = 318
$filler_rows = 24 - ($required_rows - 23 - (27*10));
}
... ... ...
... ... ...
有什么想法吗?
请尝试下面的代码。
if($required_rows < 21)
$filler_rows = 20 - $required_rows;
}else{
$multiplier = ($required_rows -21)/27;
if($multiplier>=0){
$filler_rows = 24 - ($required_rows - 23 - (27*$multiplier));
}
}
很确定您正在寻找:
$filler_rows = 26 - ($required_rows - 21) % 27;
最好使用 Paul Crovella 的回答
$num = 21;
if($required_rows < 21)
$filler_rows = 20 - $required_rows;
else {
$i = 0;
while(true){
$num = $num + 27;
if($required_rows < $num) {
$filler_rows = 24 - ($required_rows - 23 - (27*$i));
break;
} else {
$i++;
}
}
}