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的类 功能齐全的发送邮件类
Oct 09 PHP
BBS(php &amp; mysql)完整版(五)
Oct 09 PHP
php curl 登录163邮箱并抓取邮箱好友列表的代码(经测试)
Apr 07 PHP
CI框架源码阅读,系统常量文件constants.php的配置
Feb 28 PHP
优化PHP代码技巧的小结
Jun 02 PHP
php的POSIX 函数以及进程测试的深入分析
Jun 03 PHP
提高PHP编程效率的方法
Nov 07 PHP
ThinkPHP让分页保持搜索状态的方法
Jul 02 PHP
php中判断数组相等的方法以及数组运算符介绍
Mar 30 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
Apr 04 PHP
laravel Validator ajax返回错误信息的方法
Sep 29 PHP
PHP sdk文档处理常用代码示例解析
Dec 09 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中养成7个面向对象的好习惯
2010/01/28 PHP
Symfony学习十分钟入门经典教程
2016/02/03 PHP
php简单获取复选框值的方法
2016/05/11 PHP
php使用curl详细解析及问题汇总
2016/08/11 PHP
PHP正则匹配反斜杠'\'和美元'$'的方法
2017/02/08 PHP
PHP实现的MD5结合RSA签名算法实例
2017/10/07 PHP
php集成开发环境详解
2019/09/24 PHP
如何在PHP中使用数组
2020/06/09 PHP
如何用jquery控制表格奇偶行及活动行颜色
2014/04/20 Javascript
详解addEventListener的三个参数之useCapture
2015/03/16 Javascript
JS组件Bootstrap ContextMenu右键菜单使用方法
2016/04/17 Javascript
jQuery实现鼠标经过时高亮,同时其他同级元素变暗的效果
2016/09/18 Javascript
canvas实现钟表效果
2017/02/13 Javascript
js 性能优化之快速响应的用户界面
2017/02/15 Javascript
BootStrap的select2既可以查询又可以输入的实现代码
2017/02/17 Javascript
详解打造 Vue.js 可复用组件
2017/03/24 Javascript
基于JQuery和原生JavaScript实现网页定位导航特效
2017/04/03 jQuery
基于js 本地存储(详解)
2017/08/16 Javascript
react-router v4如何使用history控制路由跳转详解
2018/01/09 Javascript
bootstrap+jquery项目引入文件报错的解决方法
2018/01/22 jQuery
解决echarts的多个折现数据出现坐标和值对不上的问题
2018/12/28 Javascript
vue 添加和编辑用同一个表单,el-form表单提交后清空表单数据操作
2020/08/03 Javascript
Openlayers学习之地图比例尺控件
2020/09/28 Javascript
Python实现简单拆分PDF文件的方法
2015/07/30 Python
Python包,__init__.py功能与用法分析
2020/01/07 Python
pytorch 使用加载训练好的模型做inference
2020/02/20 Python
Iconfont(矢量图标)+iconmoon(图标svg互转)配合javascript实现社交分享系统
2020/04/21 Python
如何基于Python爬虫爬取美团酒店信息
2020/11/03 Python
英国婚礼商城:Wedding Mall
2019/11/02 全球购物
Linux管理员面试经常问道的相关命令
2014/12/12 面试题
企业员工薪酬方案
2014/06/04 职场文书
医学生求职自荐书
2014/06/12 职场文书
医院标语大全
2014/06/23 职场文书
上课迟到检讨书范文
2015/05/06 职场文书
nginx服务器的下载安装与使用详解
2021/08/02 Servers
Oracle数据库事务的开启与结束详解
2022/06/25 Oracle