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中cookie的作用域
Mar 27 PHP
很好用的PHP数据库类
May 27 PHP
PHP缩略图等比例无损压缩,可填充空白区域补充色
Jun 10 PHP
php中将图片gif,jpg或mysql longblob或blob字段值转换成16进制字符串
Aug 23 PHP
基于PHP CURL获取邮箱地址的详解
Jun 03 PHP
php常用Stream函数集介绍
Jun 24 PHP
php中mysql连接和基本操作代码(快速测试使用,简单方便)
Apr 25 PHP
Laravel 5框架学习之日期,Mutator 和 Scope
Apr 08 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
Nov 15 PHP
PHP实现网页内容html标签补全和过滤的方法小结【2种方法】
Apr 27 PHP
PHP tp5中使用原生sql查询代码实例
Oct 28 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生成扇形比例图实例
2013/11/06 PHP
php使用cookie保存用户登录的用户名实例
2015/01/26 PHP
php将数组转换成csv格式文件输出的方法
2015/03/14 PHP
SSO单点登录的PHP实现方法(Laravel框架)
2016/03/23 PHP
在CentOS系统上从零开始搭建WordPress博客的全流程记录
2016/04/21 PHP
laravel自定义分页效果
2017/07/23 PHP
phpfpm的作用和用法
2019/10/10 PHP
js null,undefined,字符串小结
2010/08/21 Javascript
自定义一个jquery插件[鼠标悬浮时候 出现说明label]
2011/06/27 Javascript
JavaScript中的View-Model使用介绍
2011/08/11 Javascript
你的 mixin 真的兼容 ECMAScript 5 吗?
2013/04/11 Javascript
jQuery中click事件用法实例
2014/12/26 Javascript
jQuery扁平化风格下拉框美化插件FancySelect使用指南
2015/02/10 Javascript
JavaScript实现广告的关闭与显示效果实例
2015/07/02 Javascript
jQuery插件ajaxfileupload.js实现上传文件
2020/10/23 Javascript
js获取隐藏元素的宽高
2017/02/24 Javascript
JS实现的3des+base64加密解密算法完整示例
2018/05/18 Javascript
以v-model与promise两种方式实现vue弹窗组件
2018/05/21 Javascript
Angularjs实现数组随机排序的方法
2018/10/02 Javascript
微信公众号H5支付接口调用方法
2019/01/10 Javascript
Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
2014/06/04 Python
python使用socket远程连接错误处理方法
2015/04/29 Python
用Python写飞机大战游戏之pygame入门(4):获取鼠标的位置及运动
2015/11/05 Python
Python中方法链的使用方法
2016/02/23 Python
判断网页编码的方法python版
2016/08/12 Python
python+selenium+autoit实现文件上传功能
2017/08/23 Python
python实现学生信息管理系统
2020/04/05 Python
python DataFrame 修改列的顺序实例
2018/04/10 Python
使用python实现回文数的四种方法小结
2019/11/24 Python
moosejaw旗下的户外商品促销网站:Mountain Steals
2017/02/27 全球购物
亚马逊印度站:Amazon.in
2017/10/15 全球购物
漫威玩具服装及周边商品官方购物网站:Marvel Shop
2019/05/11 全球购物
俄罗斯Sportmarket体育在线商店:用于旅游和户外活动
2019/11/12 全球购物
体育课课后反思
2014/04/24 职场文书
大学生实习鉴定评语
2014/04/25 职场文书
手把手带你彻底卸载MySQL数据库
2022/06/14 MySQL