2013-10-24 5 views
0

Итак ... HTML все еще смущает меня. У меня есть код, который печатает отчет о заказе для каждого участника, который должен быть напечатан, когда мы передаем их людям, которые заказывают заказы. Проблема в том, что div, содержащий разрыв страницы, представляет собой целую кучу нечетных размеров, поэтому, когда я пытаюсь распечатать отчет, форматирование очень странно. Иногда это приводит к тому, что печатаются пустые страницы или имеет порядок, разделенный между нижней и верхней частью двух разных страниц.Разрывы страниц в HTML

Я хотел бы выяснить, как получить каждый заказ для печати на собственной странице, в верхней части страницы, но последний div не работает так, как я этого хочу. Я пытаюсь это сделать, чтобы исправить это в течение нескольких недель; Кто-нибудь может мне помочь?

Вот код страницы:

<style> 
.first-time{ 
    text-align: right; 
    color:#fff; 
    background: #a00; 
} 
.page-break { 
    display: block; 
    page-break-before: always; 
} 
.title th{ 
    background: #6c6c6c; 
    color:#fff 
} 
</style> 
<script> 
</script> 
<div class="reports"> 
<table cellpadding="0" cellspacing="0"> 
    <?php $count_orders = 0 ?> 
    <?php $count_products = 0 ?> 
    <?php foreach ($sites as $site): ?> 
     <tr> 
      <th class="big" colspan="7"><?php echo $site ?></th> 
     </tr> 
     <?php foreach ($orders as $page_number => $order): ?> 
      <?php if ($order['Site']['name'] == $site): ?> 
       <tr class="title"> 
        <th>First Name</th> 
        <th>Last Name</th> 
        <th>Address</th> 
        <th>City</th> 
        <th>Email</th> 
        <th>Phone</th> 
        <th>Site</th> 
       </tr> 
       <tr> 
        <td><strong><?php echo $order['Account']['first_name'] ?></strong></td> 
        <td><strong><?php echo $order['Account']['last_name'] ?>&nbsp;<span style="color:red"><?php echo ($order['Account']['homebound'] == 1)?'(homebound)':'';?></span></strong></td> 
        <td><?php echo $order['Account']['street1'].$order['Account']['street2'] ?></td> 
        <td><?php echo $order['Account']['city']?></td> 
        <td><?php echo $order['Account']['email'] ?></td> 
        <td><?php echo $order['Account']['phone'] ?></td> 
        <td><?php echo $order['Site']['name'] ?></td> 
       </tr> 
       <tr> 
        <th colspan="6">Product</th> 
        <th>Quantity</th> 
       </tr> 
       <?php foreach ($order['ProductType'] as $productType): ?> 
        <tr> 
         <td colspan="6"><?php echo $productType['type'] ?></td> 
         <td><?php echo $productType['OrdersProductType']['quantity']*$productType['units'] ?></td> 
        </tr> 
        <?php $count_products++ ?> 
       <?php endforeach ?> 
       <?php foreach ($order['Coupon'] as $coupon): ?> 
        <tr> 
         <td colspan="6">Coupon</td> 
         <td>-<?php echo $coupon['discount'] ?></td> 
        </tr> 
       <?php endforeach ?> 
       <?php $count_orders++ ?> 
       <input class='account-id' href='/Reports/firstTime' data-sale="<?php echo $order['Order']['sale_id'] ?>" type='hidden' name='data[Account][id]' value="<?= $order['Account']['id'] ?>" /> 
       <tr></tr> 
       <tr><td style='border:none; padding:0;'><div class='page-break'></div></td></tr> 
      <?php endif ?> 
     <?php endforeach ?> 
    <?php endforeach ?> 
</table> 

Большая часть этого, вероятно, могут быть проигнорированы, но я включил его на всякий случай, так как мой HTML опыт кодирования минимальна в лучшем случае. Я, в основном, программист, но люди, использующие этот отчет, не понимают разницу и не понимают, почему я не могу просто исправить это, добавив разрыв страницы, как в Word ...

+0

Есть ли вероятность, что заказы могут быть слишком большими для одной страницы? Если нет, я бы предложил использовать функциональность @media print css, чтобы получить то, что вы хотите. – jonosma

+0

http://stackoverflow.com/questions/16649943/css-to-set-a4-paper-size http://stackoverflow.com/questions/797432/css-formatting-a4-print https: //developer.mozilla .org/en-US/docs/Web/CSS/@ media – jonosma

+0

Это случается не часто, но порядок может быть слишком большим для одной страницы. Когда это так, мы просто распечатали его на двух страницах и сшили его вместе. –

ответ

2

Я думаю, вы хотите использовать

.page-break { 
    display: block; 
    page-break-after: always; 
} 

поэтому он разбивает страницу после каждого заказа не сразу перед этим div. Я мог ошибаться, попробовав и дайте мне знать

+0

На самом деле это одна из первых вещей, которые я пробовал. Если я поместил что-то внутри div, это повлияет на то, находится ли оно в верхней части страницы или в нижней части заказа, но проблема с разрывом страницы по-прежнему сохраняется. –

+0

Я также попытался установить высоту div, и это тоже не сработало. –

0

Я собираюсь ответить на этот вопрос. После разговора с моим другим программистом мы не нашли в точности основную причину проблемы, но мы работали вокруг нее, разделив таблицу на две таблицы, одна из которых была только для разрыва страницы.

Это, мы знаем, страшный стиль кодирования. Тем не менее, он устранил проблему, которая заставляет нас думать, что что-то захватывает отступы из таблиц и добавляет их после разрыва страницы. Я не мог найти, что это было, но раскол его исправил.

Итак ... плохое кодирование, но оно исправлено. Для нашей маленькой компании это достаточно хорошо. Спасибо вам за помощь.

Смежные вопросы