PHP生成便于打印的网页


Posted in PHP onOctober 09, 2006

很多新闻和信息站点都提供了一种生成便于打印的网页的方法,所产生的页面的排版布局更有利于打印机的打印输出,这种方法方便了我们从网页上直接打印我们所需的内容,而不必为格式不规整伤脑筋,或者粘贴到文本编辑器中重新排版。然而,我却没看到有多少网站详细解释这些是如何实现的,在这里我提供一小段代码——用PHP来实现生成便于打印的网页并不是像想象的那么难,希望对大家有帮助。

要生成便于打印的网页,需要我们做哪些工作呢?这主要取决于你的网站特点,和你想要生成的版式特征,不过有一些基本处理需要完成:

1、    页宽——生成页面的宽度必须限制,要打印A4的纸,大约网页要在630像素宽。
2、    页面背景色——为了美观,很多网页使用了不同的背景色和背景图片,但是作为要打印的网页,最合适效果的还是白底黑字为好。
3、    广告条——移除页面上的广告
4、    表格的背景色——我们经常在表格中用颜色来强调信息和标题,这些也必须移除。
5、    链接——页面中的超链接也必须改变以使URL可见,例如:<a href=http://www.gbdirect.co.uk/ >GBDirect</a>应显示为GBDirect (http://www.gbdirect.co.uk/)  
6、    菜单——菜单是最难被禁止的,然而如果你的页面是使用模板来构建的话,那么最简单的方法是换用便于打印的没有菜单的模板。

这些生成便于打印页面的所有方法,都是非常简单的,需要实现的时候你可以被下面的代码放到网页中:
<?
//从环境变量中得到文件的相对路径
$page=substr($SCRIPT_NAME,1);

// 显示一个图标并连接到Printer Friendly Pages
// 便于打印页面的生成程序pfp.php
?>
<a href="pfp.php?page=<?=$page?>">;
  <img src="printer.gif" width="36" height="36" border="0"
   alt="Click here to produce a printer friendly page">

  <font face="arial, helvetica" size="2">
    Printer Friendly Version
  </font>
</a>    
把当前页面的名称传递到pfp.php程序中,这个程序使用PHP的“file”函数把页面作为一个字符串来处理。当这个页面被载入的时候,程序就可以增加、改写或删除HTML片段。

<?
ereg('^.*/',$SCRIPT_FILENAME,$tmp);
$page_path = substr($tmp[0],0,-1);
?>

<html>

<head>
  <base href="http://<? echo $HTTP_HOST ?>/">
  <meta name="robots" content="no index, no follow">
  <title>Printer Friendly Page</title>
</head>

<body bgcolor="white">

<font face="Arial,Helvetica">

<table border="0" cellpadding="5" cellspacing="0" width="630" >

  <tr>
    <td valign="top">
      <?
        // check if the filename for the page exists
        if (!file_exists("$page.inc"))
        {
           echo "<strong>Error - The page <?=$page?>".
                "does not exist on this site.</strong>";
        }
        else
        {
          // 得到页面的内容并把它放到一个字符串中
          $fcontents = join('', file("$page.inc"));

          // 忽略颜色属性,转换以'ignore'替代'color'

          $fcontents = ereg_replace('color','ignore',$fcontents);

          // 去除超链接中的 “_blank”
          $fcontents = ereg_replace('target=\"_blank\"','',$fcontents);

          // 替换</a>标记
          $fcontents = ereg_replace('</a>','',$fcontents);

          // 显示URL的绝对地址
          $fcontents = ereg_replace('<a[^h]*href="(http://[^"]*)"[^>]*>;([^]*)',
          '<strong>\\2</strong><em>(\\1)</em>',$fcontents);

          // 把相对链接转为绝对链接
          $fcontents = ereg_replace(
              '<a[^h]*href="([^"]*)"[^>]*>([^]*)',
       "<strong>\\2</strong><em>(http://$HTTP_HOST/\\1)</em>";,
             $fcontents);

          // 背景颜色改回白色
          $fcontents = ereg_replace('<body bgignore','<body bgcolor',  $fcontents);

         // if any markers left restore link end element
         $fcontents = ereg_replace('','</a>',$fcontents);

         // 输出页面
         echo $fcontents;
       }
      ?>
    </td>
  </tr>

  <tr>
    <td align="center"><hr width="90%"></td>
  </tr>

  <tr>
    <td align="center">
      <? include("$page_path/footer.inc"); ?>
    </td>
  </tr>

</table>

</font>

</body>
</html>
这样便于打印的页面就生成了,希望对大家能有帮助。

(译自PHPBulider/Mark Spink) 

PHP 相关文章推荐
PHP编程之高级技巧——利用Mysql函数
Oct 09 PHP
php getsiteurl()函数
Sep 05 PHP
php模拟asp中的XmlHttpRequest实现http请求的代码
Mar 24 PHP
Windows下的PHP安装文件线程安全和非线程安全的区别
Apr 23 PHP
PHP生成指定长度随机数最简洁的方法
Jul 14 PHP
Windows下的PHP 5.3.x安装 Zend Guard Loader教程
Sep 06 PHP
PHP+jquery实时显示网站在线人数的方法
Jan 04 PHP
php使用Jpgraph绘制3D饼状图的方法
Jun 10 PHP
PHP开发的微信现金红包功能示例
Jun 29 PHP
Laravel框架自定义验证过程实例分析
Feb 01 PHP
PHPUnit + Laravel单元测试常用技能
Nov 06 PHP
php+ajax实现文件切割上传功能示例
Mar 03 PHP
PHP4实际应用经验篇(5)
Oct 09 #PHP
数据库的日期格式转换
Oct 09 #PHP
PHP个人网站架设连环讲(四)
Oct 09 #PHP
用PHP+java实现自动新闻滚动窗口
Oct 09 #PHP
如何将数据从文本导入到mysql
Oct 09 #PHP
PHP个人网站架设连环讲(三)
Oct 09 #PHP
杏林同学录(九)
Oct 09 #PHP
You might like
谈谈新手如何学习PHP
2006/12/14 PHP
php在线生成ico文件的代码
2007/10/09 PHP
fleaphp crud操作之find函数的使用方法
2011/04/23 PHP
PHP与Ajax相结合实现登录验证小Demo
2016/03/16 PHP
thinkphp在php7环境下提示Cannot use ‘String’ as class name as it is reserved的解决方法
2016/09/30 PHP
PHP设计模式之装饰器模式实例详解
2018/02/07 PHP
JQuery select标签操作代码段
2010/05/16 Javascript
Egret引擎开发指南之发布项目
2014/09/03 Javascript
js改变embed标签src值的方法
2015/04/10 Javascript
解决angular的post请求后SpringMVC后台接收不到参数值问题的方法
2015/12/10 Javascript
Java框架SSH结合Easyui控件实现省市县三级联动示例解析
2016/06/12 Javascript
Bootstrap 下拉多选框插件Bootstrap Multiselect
2017/01/22 Javascript
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
微信小程序websocket聊天室的实现示例代码
2019/02/12 Javascript
vue+koa2实现session、token登陆状态验证的示例
2019/08/30 Javascript
Vue实现多标签选择器
2019/11/28 Javascript
Vue使用JSEncrypt实现rsa加密及挂载方法
2020/02/07 Javascript
Windows下Python2与Python3两个版本共存的方法详解
2017/02/12 Python
scrapy爬虫完整实例
2018/01/25 Python
Python+selenium实现自动循环扔QQ邮箱漂流瓶
2018/05/29 Python
对Python3 pyc 文件的使用详解
2019/02/16 Python
TensorFlow实现简单的CNN的方法
2019/07/18 Python
解决torch.autograd.backward中的参数问题
2020/01/07 Python
python异常处理try except过程解析
2020/02/03 Python
Python 炫技操作之合并字典的七种方法
2020/04/10 Python
Python中pass的作用与使用教程
2020/11/13 Python
Python获取指定网段正在使用的IP
2020/12/14 Python
python中类与对象之间的关系详解
2020/12/16 Python
美国山地自行车、露营、户外装备和服装购物网站:Aventuron
2018/05/05 全球购物
中专毕业生自我鉴定
2013/11/21 职场文书
市场营销专业求职信
2014/06/17 职场文书
关于成绩下滑的自我检讨书
2014/09/20 职场文书
校长师德表现自我评价
2015/03/05 职场文书
大学感恩节活动总结
2015/05/05 职场文书
Oracle11g r2 卸载干净重装的详细教程(亲测有效已重装过)
2021/06/04 Oracle
Python面试不修改数组找出重复的数字
2022/05/20 Python