我正在写一个简单的发票网络工具。
发票的大小应为A4。
我的控制器:
$this->load->view('static/print_header');
$this->load->view('static/print_invoice', $data);
$this->load->view('static/print_footer');
$data
是我的发票项目位置,如:
HEADER
Pos ----项目----价格
1 item1 10€
2 第2项 10€
3 itemitem 20€
FOOTER
如果我需要很多项目(或者他们需要很多文本)项目将进入页脚部分,我无法创建一个正确的A4页面。
如何更改我的控制器以获得类似的内容:
例如:2页如果有多个项目:
第1页:
HEADER
Pos ----项目----价格
1 item1 10€
2 第2项 10€
3 itemitem 20€
FOOTER
Page2:
HEADER
Pos ----项目----价格
4 第3项 10€
5 itemitemitem 40€
6 itemitem1234 20€
FOOTER
编辑:添加发票代码
<div id="content">
<div><span style="font-size: x-large;"><strong>Invoice</strong></span></div>
<hr />
<div>
<table style="width: 100%" id="invoice_task_list">
<tr style="background:#eee;">
<td style="width:8%;"><b>Pos.</b></td>
<td style="width:47%;"><b>Description</b></td>
<td style="width:15%;"><b>Date</b></td>
<td style="width:20%;"><b>Hours</b></td>
<td style="width:10%;"><b>Sum</b></td>
<?php
$pos = 1;
foreach( $items as $it): ?>
<tr>
<td style="width:8%;"><?php echo $pos; ?></td>
<td style="width:47%;"><?php echo $it->invoice_item_text; ?></td>
<td style="width:15%;">
<?php if ($it->invoice_item_type == 3) {$date = date('M Y', strtotime($it->invoice_item_date)); } else { $date = date('d.m.Y', strtotime($it->invoice_item_date)); } ?>
<?php echo $date; ?>
</td>
<td style="width:20%;"><?php if ($it->invoice_item_time != '0') { if ($it->invoice_item_type == 1 or $it->invoice_item_type == 2) echo gmdate('H:i', $it->invoice_item_time);}; ?></td>
<td style="width:10%;"><?php echo number_format($it->invoice_item_sum, 2, ',', ' '); ?> €</td>
</tr>
<?php $pos++; ?>
<?php endforeach; ?>
<tr>
<td colspan="3"> </td>
<td> Total (netto): </td>
<?php $netto = $sum['invoice_item_sum']; ?>
<td style="text-align: right;"><span class="currency"><?php echo number_format($netto, 2, ',', ' ') ?> €</span></td>
</tr>
<tr>
<td colspan="3"> </td>
<td> Tax 20.00% </td>
<td style="text-align: right;"><span class="currency">
<?php $tmptax = (($sum['invoice_item_sum'])/100)*$invoice['invoice_tax']; ?>
<?php echo number_format($tmptax, 2, ',', ' ')?> €</span></td>
</tr>
<tr>
<td colspan="3"> </td>
<td> Total (brutto): </td>
<td style="text-align: right;"><span class="currency" style="text-decoration: underline; font-weight: bold;">
<?php $total = ($sum['invoice_item_sum'])+((($sum['invoice_item_sum'])/100)*$invoice['invoice_tax']); ?>
<?php echo number_format($total, 2, ',', ' ')?> €</span></td>
</tr>
</table>
</div>
</div>
答案 0 :(得分:0)
这听起来像是一个css问题而不是php / codeigniter问题。
确保发票容器后面有一个clearfix:
.clearfix {
float:none;
clear:both;
}
并且您有正确的分页设置可供打印。
@media print {
.footer {page-break-after: always;}
}
请注意,一张A4纸是2480 x 3508像素,因此请确保您已调整CSS!
编辑(澄清后):
有几种不同的方法可以确定是否需要为其他页面添加其他页眉/页脚。我会选择我认为最简单的方法。如果你的行是统一的(20)行组成一个整页,那么你可以做一个简单的检查并循环你的视图。
//Note that you'll have to specify only putting 20 records here
if ($rows->num_rows() > 20) {
for ($i = 0; $i < $rows->num_rows(); $i += 20) {
$data['start'] = $i;
$data['end' = $i + 20;
$this->load->view('static/print_header');
$this->load->view('static/print_invoice', $data);
$this->load->view('static/print_footer');
}
}
答案 1 :(得分:0)
如果尝试在所有网页上添加页眉和页脚,请尝试添加<thead> and <tfoot>
元素。使用它时,它会在所有页面上显示顶部和底部内容,或者您可以使用css样式 -
<thead>
// your header content
</thead>
<tfoot>
//your footer content
</tfoot>
CSS
#header {
display: table-header-group;
}
#footer {
display: table-footer-group;
}