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 相关文章推荐
mysql,mysqli,PDO的各自不同介绍
Sep 19 PHP
php递归删除目录下的文件但保留的实例分享
May 10 PHP
thinkphp特殊标签用法概述
Nov 24 PHP
优化WordPress中文章与评论的时间显示
Jan 12 PHP
PHP常见数组函数用法小结
Mar 21 PHP
Yii2实现同时搜索多个字段的方法
Aug 10 PHP
Docker配置PHP开发环境教程
Dec 21 PHP
php登录超时检测功能实例详解
Mar 21 PHP
利用PHPStorm如何开发Laravel应用详解
Aug 30 PHP
bindParam和bindValue的区别以及在Yii2中的使用详解
Mar 12 PHP
wordpress自定义标签云与随机获取标签的方法详解
Mar 22 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
Feb 23 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 魔术函数使用说明
2010/02/21 PHP
关于PHPDocument 代码注释规范的总结
2013/06/25 PHP
thinkPHP统计排行与分页显示功能示例
2016/12/02 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
2019/08/13 PHP
javascript 关于# 和 void的区别分析
2009/10/26 Javascript
Jquery下:nth-child(an+b)的使用注意
2011/05/28 Javascript
可插入图片的TEXT文本框
2013/12/27 Javascript
javascript类型转换示例
2014/04/29 Javascript
js实现文本框只允许输入数字并限制数字大小的方法
2015/08/19 Javascript
详谈JS中实现种子随机数及作用
2016/07/19 Javascript
js改变透明度实现轮播图的算法
2020/08/24 Javascript
JavaScript中的FileReader图片预览上传功能实现代码
2017/07/24 Javascript
Angular4如何自定义首屏的加载动画详解
2017/07/26 Javascript
vue综合组件间的通信详解
2017/11/06 Javascript
vue element table 表格请求后台排序的方法
2018/09/28 Javascript
浅谈VueJS SSR 后端绘制内存泄漏的相关解决经验
2018/12/20 Javascript
Vue 动态添加路由及生成菜单的方法示例
2019/06/20 Javascript
Postman内建变量常用方法实例解析
2020/07/28 Javascript
[01:45]亚洲邀请赛互动指南虚拟物品介绍
2015/01/30 DOTA
[03:59]5分钟带你了解什么是DOTA2(第二期)
2017/02/07 DOTA
ssh批量登录并执行命令的python实现代码
2012/05/25 Python
使用Python判断IP地址合法性的方法实例
2014/03/13 Python
python3.5 tkinter实现页面跳转
2018/01/30 Python
Django使用Celery异步任务队列的使用
2018/03/13 Python
python list是否包含另一个list所有元素的实例
2018/05/04 Python
Python3.5迭代器与生成器用法实例分析
2019/04/30 Python
python移位运算的实现
2019/07/15 Python
python多线程实现TCP服务端
2019/09/03 Python
Ellos丹麦:时尚和服装在线
2016/09/19 全球购物
护士辞职信范文
2014/01/19 职场文书
学校联谊活动方案
2014/02/15 职场文书
二年级学生评语大全
2014/04/23 职场文书
本科毕业生自荐信
2014/05/26 职场文书
员工试用期自我评价
2014/09/18 职场文书
2015年超市收银员工作总结
2015/04/25 职场文书
使用canvas仿Echarts实现金字塔图的实例代码
2021/11/11 HTML / CSS