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 相关文章推荐
VFP与其他应用程序的集成
Oct 09 PHP
PHP 文件上传进度条的两种实现方法的代码
Nov 25 PHP
php 方便水印和缩略图的图形类
May 21 PHP
php中日期加减法运算实现代码
Dec 08 PHP
PHP读取大文件的类SplFileObject使用介绍
Apr 09 PHP
php计算两个文件相对路径的方法
Mar 14 PHP
在Yii2中使用Pjax导致Yii2内联脚本载入失败的原因分析
Mar 06 PHP
PHP中用mysqli面向对象打开连接关闭mysql数据库的方法
Nov 05 PHP
如何用PHP做到页面注册审核
Mar 02 PHP
PHP编译configure时常见错误的总结
Aug 17 PHP
thinkPHP中钩子的使用方法实例分析
Nov 16 PHP
详解PHP用mb_string处理windows中文字符
May 26 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
这部番真是良心,画质好到像风景区,剧情让人跟着小公会热血沸腾
2020/03/10 日漫
PHP表单递交控件名称含有点号(.)会被转化为下划线(_)的处理方法
2013/01/06 PHP
php中引用&amp;的用法分析【变量引用,函数引用,对象引用】
2016/12/12 PHP
!DOCTYPE声明对JavaScript的影响分析
2010/04/12 Javascript
仿新浪微博返回顶部的jquery实现代码
2012/10/01 Javascript
IE下JS读取xml文件示例代码
2013/08/05 Javascript
jquery实现metro效果示例代码
2013/09/06 Javascript
JavaScript的strict模式与with关键字介绍
2014/02/08 Javascript
jquery easyui使用心得
2014/07/07 Javascript
javascript+canvas实现刮刮卡抽奖效果
2015/07/29 Javascript
包含中国城市的javascript对象实例
2015/08/03 Javascript
jQuery实现火车票买票城市选择切换功能
2017/09/15 jQuery
基于vue组件实现猜数字游戏
2020/05/28 Javascript
利用原生js实现html5小游戏之打砖块(附源码)
2018/01/03 Javascript
Vue封装一个简单轻量的上传文件组件的示例
2018/03/21 Javascript
详解vue项目中实现图片裁剪功能
2019/06/07 Javascript
简单了解Ajax表单序列化的实现方法
2019/06/14 Javascript
使用p5.js临摹动态图片
2019/11/04 Javascript
JS document文档的简单操作完整示例
2020/01/13 Javascript
[01:33]完美世界DOTA2联赛PWL S3 集锦第二期
2020/12/21 DOTA
浅谈Python 中整型对象的存储问题
2016/05/16 Python
Python迭代器和生成器定义与用法示例
2018/02/10 Python
Request的中断和ErrorHandler实例解析
2018/02/12 Python
win10下tensorflow和matplotlib安装教程
2018/09/19 Python
Django 开发环境配置过程详解
2019/07/18 Python
几款好用的python工具库(小结)
2020/10/20 Python
日本民宿预约平台:STAY JAPAN
2017/07/01 全球购物
Tech21美国/加拿大:英国NO.1防摔保护壳品牌
2018/01/20 全球购物
洛杉矶时尚女装系列:J.ING US
2019/03/17 全球购物
护理专业优质毕业生自荐书
2014/01/31 职场文书
应届毕业生自荐书
2014/06/18 职场文书
群众路线教育实践活动民主生活会个人检查对照思想汇报
2014/10/04 职场文书
四风专项整治工作情况汇报
2014/10/28 职场文书
2014年调度员工作总结
2014/11/19 职场文书
2014年医生工作总结
2014/11/21 职场文书
2016年全国爱牙日宣传活动总结
2016/04/05 职场文书