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 相关文章推荐
如何开发一个虚拟域名系统
Oct 09 PHP
PHP配置心得包含MYSQL5乱码解决
Nov 20 PHP
php SQL之where语句生成器
Mar 24 PHP
在PHP中养成7个面向对象的好习惯
Jul 17 PHP
PHP中break及continue两个流程控制指令区别分析
Apr 18 PHP
PHP计划任务、定时执行任务的实现代码
Apr 23 PHP
PHP中鲜为人知的10个函数
Feb 28 PHP
PHP实现懒加载的方法
Mar 07 PHP
php数组索引与键值操作技巧实例分析
Jun 24 PHP
PHP创建word文档的方法(平台无关)
Mar 29 PHP
PHP中的use关键字及文件的加载详解
Nov 28 PHP
win10下 php安装seaslog扩展的详细步骤
Dec 04 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调用MsSQL存储过程使用内置RETVAL获取过程中的return值
2013/07/03 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
jQuery仿360导航页图标拖动排序效果代码分享
2015/08/24 Javascript
js实现卡片式项目管理界面UI设计效果
2015/12/08 Javascript
JavaScript直播评论发弹幕切图功能点集合效果代码
2016/06/26 Javascript
JavaScript实现事件的中断传播和行为阻止方法示例
2017/01/20 Javascript
jQuery使用正则验证15/18身份证的方法示例
2017/04/27 jQuery
浅谈Node模块系统及其模式
2017/11/17 Javascript
vue中使用v-model完成组件间的通信
2019/08/22 Javascript
Vue2.X和Vue3.0数据响应原理变化的区别
2019/11/07 Javascript
使用Vue.set()方法实现响应式修改数组数据步骤
2019/11/09 Javascript
[06:07]辉夜杯现场观众互动 “比谁远送显示器”
2015/12/26 DOTA
python实现异步回调机制代码分享
2014/01/10 Python
python2.7实现邮件发送功能
2018/12/12 Python
Python 可变类型和不可变类型及引用过程解析
2019/09/27 Python
Python 脚本拉取 Docker 镜像问题
2019/11/10 Python
使用 pytorch 创建神经网络拟合sin函数的实现
2020/02/24 Python
Python sorted排序方法如何实现
2020/03/31 Python
django 数据库 get_or_create函数返回值是tuple的问题
2020/05/15 Python
详解python中的闭包
2020/09/07 Python
python 根据列表批量下载网易云音乐的免费音乐
2020/12/03 Python
HTML5 audio标签使用js进行播放控制实例
2015/04/24 HTML / CSS
英国最大的电子产品和家电零售企业:Currys PC World
2016/09/24 全球购物
idealfit英国:世界领先的女性健身用品和运动衣物品牌
2017/11/25 全球购物
捷克母婴用品购物网站:Feedo.cz
2020/12/28 全球购物
关于递归的一道.NET面试题
2013/05/12 面试题
信息专业个人的自我评价
2013/12/27 职场文书
企业演讲稿范文
2013/12/28 职场文书
2014基层党员批评与自我批评范文
2014/09/24 职场文书
2014年服务员工作总结
2014/11/18 职场文书
公务员政审个人总结
2015/02/12 职场文书
党员进社区活动总结
2015/05/07 职场文书
2021年pycharm的最新安装教程及基本使用图文详解
2021/04/03 Python
python批量创建变量并赋值操作
2021/06/03 Python
mysql定时自动备份数据库的方法步骤
2021/07/07 MySQL
SQLServer之常用函数总结详解
2021/08/30 SQL Server