如何在codeigniter中创建第二个a4页面?

时间:2015-10-27 17:47:18

标签: php codeigniter


我正在写一个简单的发票网络工具。
发票的大小应为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">&nbsp;</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">&nbsp;</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">&nbsp;</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>

2 个答案:

答案 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;
    }