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 email邮箱正则
Oct 08 PHP
php 记录进行累加并显示总时长为秒的结果
Nov 04 PHP
php中使用exec,system等函数调用系统命令的方法(不建议使用,可导致安全问题)
Sep 07 PHP
PHP清除字符串中所有无用标签的方法
Dec 01 PHP
php删除指定目录的方法
Apr 03 PHP
php生成PDF格式文件并且加密
Jun 22 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
Nov 14 PHP
PHP实现的获取文件mimes类型工具类示例
Apr 08 PHP
PHP后台实现微信小程序登录
Aug 03 PHP
关于php unset对json_encode的影响详解
Nov 14 PHP
PHP的PDO错误与错误处理
Jan 27 PHP
Laravel框架FormRequest中重写错误处理的方法
Feb 18 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
CodeIgniter框架中_remap()使用方法2例
2014/03/10 PHP
ThinkPHP、ZF2、Yaf、Laravel框架路由大比拼
2015/03/25 PHP
自动更新作用
2006/10/08 Javascript
jquery实现邮箱自动补全功能示例分享
2014/02/17 Javascript
关闭页面window.location事件未执行的原因及解决方法
2014/09/01 Javascript
js父页面与子页面不同时显示的方法
2014/10/16 Javascript
js实现屏幕自适应局部代码分享
2015/01/30 Javascript
介绍JavaScript的一个微型模版
2015/06/24 Javascript
jQuery中trigger()与bind()用法分析
2015/12/18 Javascript
jQuery 实现评论等级好评差评特效
2016/05/06 Javascript
React实现双向绑定示例代码
2016/09/19 Javascript
Node.js pipe实现源码解析
2017/08/12 Javascript
JavaScript选取(picking)和反选(rejecting)对象的属性方法
2017/08/16 Javascript
vue封装第三方插件并发布到npm的方法
2017/09/25 Javascript
在vue中更换字体,本地存储字体非引用在线字体库的方法
2018/09/28 Javascript
手把手教你写一个微信小程序(推荐)
2018/10/17 Javascript
在vue中获取微信支付code及code被占用问题的解决方法
2019/04/16 Javascript
仿vue-cli搭建属于自己的脚手架的方法步骤
2019/04/17 Javascript
详解关于webpack多入口热加载很慢的原因
2019/04/24 Javascript
vue跳转同一个组件,参数不同,页面接收值只接收一次的解决方法
2019/11/05 Javascript
Python内置函数的用法实例教程
2014/09/08 Python
学习python类方法与对象方法
2016/03/15 Python
对python文件读写的缓冲行为详解
2019/02/13 Python
Python 保持登录状态进行接口测试的方法示例
2019/08/06 Python
Python dict的常用方法示例代码
2020/06/23 Python
pandas apply多线程实现代码
2020/08/17 Python
python pip如何手动安装二进制包
2020/09/30 Python
python使用smtplib模块发送邮件
2020/12/17 Python
Corelle官方网站:购买康宁餐具
2016/11/02 全球购物
出纳员岗位职责风险
2014/03/06 职场文书
乡镇挂职心得体会
2014/09/04 职场文书
党员干部民主生活会议批评与自我批评材料
2014/09/20 职场文书
工作感言一句话
2015/08/01 职场文书
房产销售员2015年终工作总结
2015/10/22 职场文书
小学一年级语文教学反思
2016/03/03 职场文书
uniapp引入支付宝原生扫码插件步骤详解
2022/07/23 Javascript