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安全之直接用$获取值而不$_GET 字符转义
Jun 03 PHP
php 保留字列表
Oct 04 PHP
深入探讨:Nginx 502 Bad Gateway错误的解决方法
Jun 03 PHP
PHP代码审核的详细介绍
Jun 13 PHP
解析coreseek for sphinx的使用
Jun 21 PHP
浅析虚拟主机服务器php fsockopen函数被禁用的解决办法
Aug 07 PHP
php实现图形显示Ip地址的代码及注释
Jan 20 PHP
Yii2简单实现多语言配置的方法
Jul 23 PHP
php  PATH_SEPARATOR判断当前服务器系统类型实例
Oct 28 PHP
IOS 开发之NSDictionary转换成JSON字符串
Aug 14 PHP
PHP实现的操作数组类库定义与用法示例
May 24 PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
Sep 05 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实现多服务器共享SESSION数据的方法
2007/03/16 PHP
解析php框架codeigniter中如何使用框架的session
2013/06/24 PHP
PHP程序员必须清楚的问题汇总
2014/12/18 PHP
PHP创建/删除/复制文件夹、文件
2016/05/03 PHP
PHP二维数组去重实例分析
2016/11/18 PHP
js整数字符串转换为金额类型数据(示例代码)
2013/12/26 Javascript
浅析jquery某一元素重复绑定的问题
2014/01/03 Javascript
css如何让浮动元素水平居中
2015/08/07 Javascript
JS组件Bootstrap Select2使用方法详解
2020/04/17 Javascript
ECharts仪表盘实例代码(附源码下载)
2016/02/18 Javascript
BootStrap创建响应式导航条实例代码
2016/05/31 Javascript
浅谈DOM的操作以及性能优化问题-重绘重排
2017/01/08 Javascript
jQuery实现淡入淡出的模态框
2017/02/09 Javascript
jQuery实现遍历复选框的方法示例
2017/03/06 Javascript
javascript编写简易计算器
2017/05/06 Javascript
ionic2懒加载配置详解
2017/09/01 Javascript
jquery手机触屏滑动拼音字母城市选择器的实例代码
2017/12/11 jQuery
Vue中的字符串模板的使用
2018/05/17 Javascript
详解vue-loader在项目中是如何配置的
2018/06/04 Javascript
小试小程序云开发(小结)
2019/06/06 Javascript
JavaScript复制变量三种方法实例详解
2020/01/09 Javascript
从零开始在vue-cli4配置自适应vw布局的实现
2020/06/08 Javascript
JS画布动态实现黑客帝国背景效果
2020/11/08 Javascript
zbar解码二维码和条形码示例
2014/02/07 Python
python类:class创建、数据方法属性及访问控制详解
2016/07/25 Python
python学习基础之循环import及import过程
2018/04/22 Python
Python基于pyCUDA实现GPU加速并行计算功能入门教程
2018/06/19 Python
解决img标签上下出现间隙的方法
2016/12/14 HTML / CSS
HTML5实现应用程序缓存(Application Cache)
2020/06/16 HTML / CSS
副科竞争上岗演讲稿
2014/05/12 职场文书
法人委托书范本格式
2014/09/15 职场文书
开发一个封装iframe的vue组件
2021/03/29 Vue.js
Java基于字符界面的简易收银台
2021/06/26 Java/Android
python中Matplotlib绘制直线的实例代码
2021/07/04 Python
Python常遇到的错误和异常
2021/11/02 Python
深入理解go缓存库freecache的使用
2022/02/15 Golang