0

我刚开始使用 PHP,并且无法正确打印我的页面结果。我从 index.php 调用下面的页面。如果我在显示器上显示页面看起来没问题,但是当我打印页面并且它超过一页时,页面末尾的部分被切断并在第二页上继续。我正在寻找一种方法,以便当我打印页面时,它将查看该部分(每个项目编号)是否适合该页面中的整个部分(修复描述、常见原因等)。如果没有,则只需在下一页上打印。

我还包括了 CSS 文件。基本上它所做的就是强制页面的宽度适合信纸大小的纸张。先感谢您。

 <?php include_once $_SERVER['DOCUMENT_ROOT'] .
    '/fms/includes/helpers.inc.php'; ?>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Print Repair Form</title>
  <link rel='stylesheet' type='text/css' href='/fms/css/letter-size.css' />
</head>
<body>
  <div id="page-wrap">
    <table>
    <tr>
          <td rowspan = "3" id="logo"><a href="/fms/"><img src="/fms/images/flex_no_address_256.jpg" /></a></td>
      <td rowspan = "3" id="address">Address<br />
        City, State Zipcode <br />
        Phone number <br />
        website address
      </td>
      <td>
        <table>
        <tr>
              <td id="repairinfo" class="theading" colspan = "2">Repair Detail</td>
        </tr>
        <tr>
          <td><?php htmlout($custno); ?></td>
          <td width="100px">WO: <?php htmlout($wonum); ?></td>
        </tr>
        <tr>
          <td><?php htmlout($custname); ?></td>
          <td></td>
        </tr>
         </table>
      </td>
    </tr>
     </table>
     <br />
     <?php foreach($items as $item): ?>
     <table border ="1">
    <tr>
      <td class="theading">Type of Repair</td>
          <td class="theading">Repair ID</td>
      <td class="theading">Fault Picture</td>
    </tr>
    <tr>
      <td class="tablepadding"><?php htmlout($item['repairtype']); ?></td>
      <td class="tablepadding"><?php htmlout($item['itemno']); ?></td>
      <td rowspan="7" align="center">
          <img src="/fms/images/wo_items/<?php htmlout($item['filename']); ?>"          width="256" />
      </td>
    </tr>
    <tr>
      <td class="theading" colspan="2">Repair Description</td>
    </tr>
    <tr>
      <td class="tablepadding" colspan="2"><?php htmlout($item['repairdesc']); ?>
      </td>
    </tr>
    <tr>
      <td class="theading" colspan="2">Common Causes</td>
    </tr>
    <tr>
      <td class="tablepadding" colspan="2"><?php htmlout($item['commoncause']); ?>
      </td>
    </tr>
    <tr>
      <td class="theading" colspan="2">Preventive Measures and Maintenance</td>
    </tr>
    <tr>
      <td class="tablepadding" colspan="2"><?php htmlout($item['maintenance']); ?>
      </td>
    </tr>
      </table>
      <br />
      <?php endforeach; ?>
    </div>
</body>
</html>

CSS:

* { margin: 0; padding: 0;}
body {
    font: 12px/1.4 Georgia, serif;
}

a img {
  border: none;
}
#page-wrap {
    width: 800px;
    margin: 0 auto;
}

table {
    width:100%;
}

#logo {
    width: 256px;
}

#address {
    width: 170px;
}

#repairinfo {
    border-bottom: solid 1px;
    text-align: center;
}

.theading {
  font-weight: bold;
  padding: 3px;
}

table tr td.tablepadding {
  padding: 3px;
}
4

2 回答 2

0

您的问题不在于 PHP,而在于 CSS。您需要包含打印特定样式表,因为这将与您的计算机显示器样式不同。

这是一篇关于打印 CSS 的好博文 http://www.webcredible.co.uk/user-friendly-resources/css/print-stylesheet.shtml

在您的 html 中,打印样式表<link>元素将需要一个media="print"属性

然后在您的打印样式表中,您可以指定宽度

于 2012-11-20T14:38:34.377 回答
0

它应该通过 CSS 而不是 PHP 来实现,尽管您可以使用 php 以及一种解决方法,google for css media。

打印的 CSS 有一些技巧:http: //slodive.com/web-development/css-print-page-tricks/

不能给你具体的细节,因为我没有做太多的印刷工作,但这一切都是为了测试适合纸的总高度,并在 php 中寻找一个度量(也许是线条?)所以如果尺寸更大比您设置的那个,它创建另一个表。

您还可以使用 Javascript,因为您可以检测元素(例如表格)的高度,并在达到最大高度时调用某些函数。


此外,如果不是完全必要,我建议您不要使用表格,这是一种非常老派的方法,修改起来很麻烦,跨浏览器有更多不同的行为,并且有更多不必要的代码。

于 2012-11-20T14:44:03.397 回答