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
隐藏你的.php文件的实现方法
Mar 19 PHP
PHP转换IP地址到真实地址的方法详解
Jun 09 PHP
php生成xml时添加CDATA标签的方法
Oct 17 PHP
Yii中CGridView关联表搜索排序方法实例详解
Dec 03 PHP
php实现的简易扫雷游戏实例
Jul 09 PHP
浅谈使用PHP开发微信支付的流程
Oct 04 PHP
在php中设置session用memcache来存储的方法总结
Jan 14 PHP
Yii2中DropDownList简单用法示例
Jul 18 PHP
PHP面向对象程序设计OOP继承用法入门示例
Dec 27 PHP
详解PHP swoole process的使用方法
Aug 26 PHP
Laravel框架实现的批量删除功能示例
Jan 16 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中var_export与var_dump的区别分析
2010/08/21 PHP
mysql,mysqli,PDO的各自不同介绍
2012/09/19 PHP
javascript实现的动态添加表单元素input,button等(appendChild)
2007/11/24 Javascript
JavaScript 动态生成方法的例子
2009/07/22 Javascript
JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例
2013/06/29 Javascript
js 获取范围内的随机数实例代码
2016/08/02 Javascript
谈谈对JavaScript原生拖放的深入理解
2016/09/20 Javascript
AngularJS 获取ng-repeat动态生成的ng-model值实例详解
2016/11/29 Javascript
解决给dom元素绑定click等事件无效问题的方法
2017/02/17 Javascript
layer实现登录弹框,登录成功后关闭弹框并调用父窗口的例子
2019/09/11 Javascript
TypeScript中使用getElementXXX()的示例代码
2019/09/12 Javascript
[02:43]2018DOTA2亚洲邀请赛主赛事首日TOP5
2018/04/04 DOTA
python简单分割文件的方法
2015/07/30 Python
python+pyqt实现右下角弹出框
2017/10/26 Python
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
2018/01/30 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
2018/02/18 Python
Python判断变量名是否合法的方法示例
2019/01/28 Python
实例详解Matlab 与 Python 的区别
2019/04/26 Python
解决python3 安装不了PIL的问题
2019/08/16 Python
pytorch 自定义参数不更新方式
2020/01/06 Python
在python3.64中安装pyinstaller库的方法步骤
2020/06/02 Python
HTML5地理定位_动力节点Java学院整理
2017/07/12 HTML / CSS
俄罗斯品牌服装和鞋子的在线商店:KUPIVIP
2019/10/27 全球购物
瑞士男士时尚网上商店:Babista
2020/05/14 全球购物
C#实现对任一张表的数据进行增,删,改,查要求,运用Webservice,体现出三层架构
2014/07/11 面试题
书法比赛获奖感言
2014/02/10 职场文书
2014小学植树节活动总结
2014/03/10 职场文书
民族团结先进集体事迹材料
2014/05/22 职场文书
会计求职信范文
2014/05/24 职场文书
小学教师师德师风演讲稿
2014/08/22 职场文书
校园学雷锋广播稿
2014/10/08 职场文书
2014年团总支工作总结
2014/11/21 职场文书
公文格式,规则明细(新手收藏)
2019/07/23 职场文书
浅谈Go语言多态的实现与interface使用
2021/06/16 Golang
使用Redis实现实时排行榜功能
2021/07/02 Redis
python实现学生信息管理系统(面向对象)
2022/06/05 Python