月度归档:2012年03月

Unicode – CSS中文字体转编码

“\5b8b\4f53″  是 “宋体”。用 unicode 表示,不用 SimSun, 是因为 Firefox 的某些版本和 Opera 不支持 SimSun 的写法

 

中文名 英文名 Unicode Unicode 2
Mac OS
华文细黑 STHeiti Light [STXihei] \534E\6587\7EC6\9ED1 华文细黑
华文黑体 STHeiti \534E\6587\9ED1\4F53 华文黑体
华文楷体 STKaiti \534E\6587\6977\4F53 华文楷体
华文宋体 STSong \534E\6587\5B8B\4F53 华文宋体
华文仿宋 STFangsong \534E\6587\4EFF\5B8B 华文仿宋
丽黑 Pro LiHei Pro Medium \4E3D\9ED1 Pro 丽黑 Pro
丽宋 Pro LiSong Pro Light \4E3D\5B8B Pro 丽宋 Pro
标楷体 BiauKai \6807\6977\4F53 标楷体
苹果丽中黑 Apple LiGothic Medium \82F9\679C\4E3D\4E2D\9ED1 苹果丽中黑
苹果丽细宋 Apple LiSung Light \82F9\679C\4E3D\7EC6\5B8B 苹果丽细宋
Windows
新细明体 PMingLiU \65B0\7EC6\660E\4F53 新细明体
细明体 MingLiU \7EC6\660E\4F53 细明体
标楷体 DFKai-SB \6807\6977\4F53 标楷体
黑体 SimHei \9ED1\4F53 黑体
宋体 SimSun \5B8B\4F53 宋体
新宋体 NSimSun \65B0\5B8B\4F53 新宋体
仿宋 FangSong \4EFF\5B8B 仿宋
楷体 KaiTi \6977\4F53 楷体
仿宋_GB2312 FangSong_GB2312 \4EFF\5B8B_GB2312 仿宋_GB2312
楷体_GB2312 KaiTi_GB2312 \6977\4F53_GB2312 楷体_GB2312
微软正黑体 Microsoft JhengHei \5FAE\x8F6F\6B63\9ED1\4F53 微软正黑体
微软雅黑 Microsoft YaHei \5FAE\8F6F\96C5\9ED1 微软雅黑
Office
隶书 LiSu \96B6\4E66 隶书
幼圆 YouYuan \5E7C\5706 幼圆
华文细黑 STXihei \534E\6587\7EC6\9ED1 华文细黑
华文楷体 STKaiti \534E\6587\6977\4F53 华文楷体
华文宋体 STSong \534E\6587\5B8B\4F53 华文宋体
华文中宋 STZhongsong \534E\6587\4E2D\5B8B 华文中宋
华文仿宋 STFangsong \534E\6587\4EFF\5B8B 华文仿宋
方正舒体 FZShuTi \65B9\6B63\8212\4F53 方正舒体
方正姚体 FZYaoti \65B9\6B63\59DA\4F53 方正姚体
华文彩云 STCaiyun \534E\6587\5F69\4E91 华文彩云
华文琥珀 STHupo \534E\6587\7425\73C0 华文琥珀
华文隶书 STLiti \534E\6587\96B6\4E66 华文隶书
华文行楷 STXingkai \534E\6587\884C\6977 华文行楷
华文新魏 STXinwei \534E\6587\65B0\9B4F 华文新魏

CSS+DIV布局中的自适应宽度

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<style type="text/css">
<!--
body{margin:0;padding:0px;text-align:center;}
#wrap{margin:0 auto;text-align:left; width:900px;}

/*左边栏,固定宽度*/
.wrap_l{float:left;background:#FF0000;margin-right:-150px;width:150px;}
/*中间栏,自适应宽度*/
.wrap_m{width:auto;background:#00FF00;margin:0 140px 0 150px;}
/*右边栏,固定宽度*/
.wrap_r{float:right;background:#0000FF;margin-left:-140px;width:140px;}

.wrap_inner_l{float:left;background:#00FFFF;margin-right:-200px;width:200px;}
.wrap_inner_m{width:auto;background:#FFFF00;margin:0 0 0 200px;}

-->
</style>
</head>
<body>
<div id="wrap">
<div class="wrap_l">左边栏</div>
<div class="wrap_r">右边栏</div>
<div class="wrap_m">中间栏</div>
</div>
</body>
</html>

mongo

mongodb与mysql命令对比

传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成,MongoDB是由数据库(database)、集合(collection)、文档对象(document)三个层次组成。MongoDB对于关系型数据库里的表,但是集合中没有列、行和关系概念,这体现了模式自由的特点。 

MySQL

MongoDB

说明

mysqld

mongod

服务器守护进程

mysql

mongo

客户端工具

mysqldump

mongodump

逻辑备份工具

mysql

mongorestore

逻辑恢复工具

 

db.repairDatabase()

修复数据库

mysqldump

mongoexport

数据导出工具

source

mongoimport

数据导入工具

grant * privileges on *.* to …

Db.addUser()

Db.auth()

新建用户并权限

show databases

show dbs

显示库列表

Show tables

Show collections

显示表列表

Show slave status

Rs.status

查询主从状态

Create table users(a int, b int)

db.createCollection("mycoll", {capped:true,

size:100000}) 另:可隐式创建表。

创建表

Create INDEX idxname ON users(name)

db.users.ensureIndex({name:1})

创建索引

Create INDEX idxname ON users(name,ts DESC)

db.users.ensureIndex({name:1,ts:-1})

创建索引

Insert into users values(1, 1)

db.users.insert({a:1, b:1})

插入记录

Select a, b from users

db.users.find({},{a:1, b:1})

查询表

Select * from users

db.users.find()

查询表

Select * from users where age=33

db.users.find({age:33})

条件查询

Select a, b from users where age=33

db.users.find({age:33},{a:1, b:1})

条件查询

select * from users where age<33

db.users.find({'age':{$lt:33}})

条件查询

select * from users where age>33 and age<=40

db.users.find({'age':{$gt:33,$lte:40}})

条件查询

select * from users where a=1 and b='q'

db.users.find({a:1,b:'q'})

条件查询

select * from users where a=1 or b=2

db.users.find( { $or : [ { a : 1 } , { b : 2 } ] } )

条件查询

select * from users limit 1

db.users.findOne()

条件查询

select * from users where name like "%Joe%"

db.users.find({name:/Joe/})

模糊查询

select * from users where name like "Joe%"

db.users.find({name:/^Joe/})

模糊查询

select count(1) from users

Db.users.count()

获取表记录数

select count(1) from users where age>30

db.users.find({age: {'$gt': 30}}).count()

获取表记录数

select DISTINCT last_name from users

db.users.distinct('last_name')

去掉重复值

select * from users ORDER BY name

db.users.find().sort({name:-1})

排序

select * from users ORDER BY name DESC

db.users.find().sort({name:-1})

排序

EXPLAIN select * from users where z=3

db.users.find({z:3}).explain()

获取存储路径

update users set a=1 where b='q'

db.users.update({b:'q'}, {$set:{a:1}}, false, true)

更新记录

update users set a=a+2 where b='q'

db.users.update({b:'q'}, {$inc:{a:2}}, false, true)

更新记录

delete from users where z="abc"

db.users.remove({z:'abc'})

删除记录

 

db. users.remove()

删除所有的记录

drop database IF EXISTS test;

use test

db.dropDatabase()

删除数据库

drop table IF EXISTS test;

db.mytable.drop()

删除表/collection

 

db.addUser(‘test’, ’test’)

添加用户

readOnly-->false

 

db.addUser(‘test’, ’test’, true)

添加用户

readOnly-->true

 

db.addUser("test","test222")

更改密码

 

db.system.users.remove({user:"test"})

或者db.removeUser('test')

删除用户

 

use admin

超级用户

 

db.auth(‘test’, ‘test’)

用户授权

 

db.system.users.find()

查看用户列表

 

show users

查看所有用户

 

db.printCollectionStats()

查看各collection的状态

 

db.printReplicationInfo()

查看主从复制状态

 

show profile

查看profiling

 

db.copyDatabase('mail_addr','mail_addr_tmp')

拷贝数据库

 

db.users.dataSize()

查看collection数据的大小

 

db. users.totalIndexSize()

查询索引的大小

 

 

mongodb语法

 

MongoDB的好处挺多的,比如多列索引,查询时可以用一些统计函数,支持多条件查询,但是目前多表查询是不支持的,可以想办法通过数据冗余来解决多表查询的问题。

MongoDB对数据的操作很丰富,下面做一些举例说明,内容大部分来自官方文档,另外有部分为自己理解。

 

查询colls所有数据

db.colls.find() //select * from colls 

通过指定条件查询

db.colls.find({‘last_name’: ‘Smith’});//select * from colls where last_name=’Smith’ 

指定多条件查询

db.colls.find( { x : 3, y : “foo” } );//select * from colls where x=3 and y=’foo’

 

指定条件范围查询

db.colls.find({j: {$ne: 3}, k: {$gt: 10} });//select * from colls where j!=3 and k>10

 

查询不包括某内容

db.colls.find({}, {a:0});//查询除a为0外的所有数据

 

支持<, <=, >, >=查询,需用符号替代分别为$lt,$lte,$gt,$gte

db.colls.find({ “field” : { $gt: value } } ); 

db.colls.find({ “field” : { $lt: value } } ); 

db.colls.find({ “field” : { $gte: value } } );

db.colls.find({ “field” : { $lte: value } } );

 

也可对某一字段做范围查询

db.colls.find({ “field” : { $gt: value1, $lt: value2 } } );

 

不等于查询用字符$ne

db.colls.find( { x : { $ne : 3 } } );

 

in查询用字符$in

db.colls.find( { “field” : { $in : array } } );

db.colls.find({j:{$in: [2,4,6]}});

 

not in查询用字符$nin

db.colls.find({j:{$nin: [2,4,6]}});

 

取模查询用字符$mod

db.colls.find( { a : { $mod : [ 10 , 1 ] } } )// where a % 10 == 1

 

$all查询

db.colls.find( { a: { $all: [ 2, 3 ] } } );//指定a满足数组中任意值时

 

$size查询

db.colls.find( { a : { $size: 1 } } );//对对象的数量查询,此查询查询a的子对象数目为1的记录

 

$exists查询

db.colls.find( { a : { $exists : true } } ); // 存在a对象的数据

db.colls.find( { a : { $exists : false } } ); // 不存在a对象的数据

 

$type查询$type值为bsonhttp://bsonspec.org/数 据的类型值

db.colls.find( { a : { $type : 2 } } ); // 匹配a为string类型数据

db.colls.find( { a : { $type : 16 } } ); // 匹配a为int类型数据

 

使用正则表达式匹配

db.colls.find( { name : /acme.*corp/i } );//类似于SQL中like

 

内嵌对象查询

db.colls.find( { “author.name” : “joe” } );

 

1.3.3版本及更高版本包含$not查询

db.colls.find( { name : { $not : /acme.*corp/i } } );

db.colls.find( { a : { $not : { $mod : [ 10 , 1 ] } } } );

 

sort()排序

db.colls.find().sort( { ts : -1 } );//1为升序2为降序

 

limit()对限制查询数据返回个数

db.colls.find().limit(10)

 

skip()跳过某些数据

db.colls.find().skip(10)

 

snapshot()快照保证没有重复数据返回或对象丢失

 

count()统计查询对象个数

db.students.find({‘address.state’ : ‘CA’}).count();//效率较高

db.students.find({‘address.state’ : ‘CA’}).toArray().length;//效率很低

 

group()对查询结果分组和SQL中group by函数类似

distinct()返回不重复值

---------------------------------------------------------------------------------------

mongodb查询的语法

1 ) . 大于,小于,大于或等于,小于或等于

$gt:大于
$lt:小于
$gte:大于或等于
$lte:小于或等于

例子:

db.collection.find({ "field"
: { $gt: value } } );   // greater than  : field > value

db.collection.find({ "field"
: { $lt: value } } );   // less than  :  field < value

db.collection.find({ "field"
: { $gte: value } } );  // greater than or equal to : field >= value

db.collection.find({ "field"
: { $lte: value } } );  // less than or equal to : field <= value

 

如查询j大于3,小于4:

db.things.find({j : {$lt: 3}});
db.things.find({j : {$gte: 4}});

也可以合并在一条语句内:

db.collection.find({ "field"
 : { $gt: value1, $lt: value2 } } );    // value1 < field < value

2) 不等于 $ne

例子:

db.things.find( { x : { $ne : 3 } } );


3) in 和 not in ($in $nin)

语法:
db.collection.find( { "field"
 : { $in : array } } );

例子:

db.things.find({j:{$in: [2,4,6]}});
db.things.find({j:{$nin: [2,4,6]}});


4) 取模运算$mod

如下面的运算:
db.things.find( "this
.a % 10 == 1"
)

可用$mod代替:

db.things.find( { a : { $mod : [ 10 , 1 ] } } )


5)  $all

$all和$in类似,但是他需要匹配条件内所有的值:

如有一个对象:
{ a: [ 1, 2, 3 ] }

下面这个条件是可以匹配的:

db.things.find( { a: { $all: [ 2, 3 ] } } );

但是下面这个条件就不行了:

db.things.find( { a: { $all: [ 2, 3, 4 ] } } );


6)  $size

$size是匹配数组内的元素数量的,如有一个对象:{a:["foo"] },他只有一个元素:

下面的语句就可以匹配:
db.things.find( { a : { $size: 1 } } );

官网上说不能用来匹配一个范围内的元素,如果想找$size<5之类的,他们建议创建一个字段来保存元素的数量。

You cannot use $size  to find a range of sizes (for example: arrays with more than 1 element). If you need to query for a range, create an extrasize  field that you increment when you add elements.

 

7)$exists

$exists用来判断一个元素是否存在:

如:

db.things.find( { a : { $exists : true
 } } ); // 如果存在

元素

a,就返回

db.things.find( { a : { $exists : false
 } } ); // 如果不存在元素a,就返回


8)  $type

$type  基于 bson  type来匹配一个元素的类型,像是按照类型ID来匹配,不过我没找到bson类型和id对照表。

db.things.find( { a : { $type : 2 } } ); // matches if
 a is a string

db.things.find( { a : { $type : 16 } } ); // matches if
 a is an int

9)正则表达式

mongo支持正则表达式,如:
 

db.customers.find( { name : /acme.*corp/i } ); // 后面的i的意思是区分大小写


10)  查询数据内的值

下面的查询是查询colors内red的记录,如果colors元素是一个数据,数据库将遍历这个数组的元素来查询。
db.things.find( { colors : "red"
 } );

11) $elemMatch

如果对象有一个元素是数组,那么$elemMatch可以匹配内数组内的元素:

> t.find( { x : { $elemMatch : { a : 1, b : { $gt : 1 } } } } ) 
{ "_id"
: ObjectId("4b5783300334000000000aa9"
), 
"x"
: [ { "a"
: 1, "b"
: 3 }, 7, { "b"
: 99 }, { "a"
: 11 } ]
}
 

$elemMatch : { a : 1, b : { $gt : 1 } } 所有的条件都要匹配上才行。

注意,上面的语句和下面是不一样的。

> t.find( { "x.a"
 : 1, "x.b"
 : { $gt : 1 } } )

$elemMatch是匹配{ "a"  : 1, "b"  : 3 },而后面一句是匹配{ "b"  : 99 }, { "a"  : 11 } 


12)  查询嵌入对象的值
db.postings.find( { "author.name"
 : "joe"
 } );

注意用法是author.name ,用一个点就行了。更详细的可以看这个链接: dot notation

举个例子:

> db.blog.save({ title : "My First Post"
, author: {name : "Jane"
, id : 1}})

如果我们要查询 authors name 是Jane的, 我们可以这样:

> db.blog.findOne({"author.name"
 : "Jane"
})

如果不用点,那就需要用下面这句才能匹配:

db.blog.findOne({"author"
 : {"name"
 : "Jane"
, "id"
 : 1}})

下面这句:

db.blog.findOne({"author"
 : {"name"
 : "Jane"
}})

是不能匹配的,因为mongodb对于子对象,他是精确匹配。

 

13) 元操作符 $not 取反

如:

db.customers.find( { name : { $not : /acme.*corp/i } } );
db.things.find( { a : { $not : { $mod : [ 10 , 1 ] } } } );

mongodb还有很多函数可以用,如排序,统计等,请参考原文。

mongodb目前没有或(or)操作符,只能用变通的办法代替

--------------------------------------------------------------------------------------------

GUI:

http://download.csdn.net/download/icejoywoo/3822577

使用SharpZipLib实现zip压缩

使用国外开源加压解压库ICSharpCode.SharpZipLib实现加压,该库的官方网站为
http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx


 

#region 加压解压方法
        
/// <summary>
        
/// 功能:压缩文件(暂时只压缩文件夹下一级目录中的文件,文件夹及其子级被忽略)
        
/// </summary>
        
/// <param name="dirPath">被压缩的文件夹夹路径</param>
        
/// <param name="zipFilePath">生成压缩文件的路径,为空则默认与被压缩文件夹同一级目录,名称为:文件夹名+.zip</param>
        
/// <param name="err">出错信息</param>
        
/// <returns>是否压缩成功</returns>
        public bool ZipFile(string dirPath, string zipFilePath, out string err)
        {
            err 
= "";
            
if (dirPath == string.Empty)
            {
                err 
= "要压缩的文件夹不能为空!";
                
return false;
            }
            
if (!Directory.Exists(dirPath))
            {
                err 
= "要压缩的文件夹不存在!";
                
return false;
            }
            
//压缩文件名为空时使用文件夹名+.zip
            if (zipFilePath == string.Empty)
            {
                
if (dirPath.EndsWith("\\"))
                {
                    dirPath 
= dirPath.Substring(0, dirPath.Length - 1);
                }
                zipFilePath 
= dirPath + ".zip";
            }

            try
            {
                
string[] filenames = Directory.GetFiles(dirPath);
                
using (ZipOutputStream s = new ZipOutputStream(File.Create(zipFilePath)))
                {
                    s.SetLevel(
9);
                    
byte[] buffer = new byte[4096];
                    
foreach (string file in filenames)
                    {
                        ZipEntry entry 
= new ZipEntry(Path.GetFileName(file));
                        entry.DateTime 
= DateTime.Now;
                        s.PutNextEntry(entry);
                        
using (FileStream fs = File.OpenRead(file))
                        {
                            
int sourceBytes;
                            
do
                            {
                                sourceBytes 
= fs.Read(buffer, 0, buffer.Length);
                                s.Write(buffer, 
0, sourceBytes);
                            } 
while (sourceBytes > 0);
                        }
                    }
                    s.Finish();
                    s.Close();
                }
            }
            
catch (Exception ex)
            {
                err 
= ex.Message;
                
return false;
            }
            
return true;
        }

        /// <summary>
        
/// 功能:解压zip格式的文件。
        
/// </summary>
        
/// <param name="zipFilePath">压缩文件路径</param>
        
/// <param name="unZipDir">解压文件存放路径,为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹</param>
        
/// <param name="err">出错信息</param>
        
/// <returns>解压是否成功</returns>
        public bool UnZipFile(string zipFilePath, string unZipDir, out string err)
        {
            err 
= "";
            
if (zipFilePath == string.Empty)
            {
                err 
= "压缩文件不能为空!";
                
return false;
            }
            
if (!File.Exists(zipFilePath))
            {
                err 
= "压缩文件不存在!";
                
return false;
            }
            
//解压文件夹为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹
            if (unZipDir == string.Empty)
                unZipDir 
= zipFilePath.Replace(Path.GetFileName(zipFilePath), Path.GetFileNameWithoutExtension(zipFilePath));
            
if (!unZipDir.EndsWith("\\"))
                unZipDir 
+= "\\";
            
if (!Directory.Exists(unZipDir))
                Directory.CreateDirectory(unZipDir);

            try
            {
                
using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFilePath)))
                {

                    ZipEntry theEntry;
                    while ((theEntry = s.GetNextEntry()) != null)
                    {
                        
string directoryName = Path.GetDirectoryName(theEntry.Name);
                        
string fileName = Path.GetFileName(theEntry.Name);
                        
if (directoryName.Length > 0)
                        {
                            Directory.CreateDirectory(unZipDir 
+ directoryName);
                        }
                        
if (!directoryName.EndsWith("\\"))
                            directoryName 
+= "\\";
                        
if (fileName != String.Empty)
                        {
                            
using (FileStream streamWriter = File.Create(unZipDir + theEntry.Name))
                            {

                                int size = 2048;
                                
byte[] data = new byte[2048];
                                
while (true)
                                {
                                    size 
= s.Read(data, 0, data.Length);
                                    
if (size > 0)
                                    {
                                        streamWriter.Write(data, 
0, size);
                                    }
                                    
else
                                    {
                                        
break;
                                    }
                                }
                            }
                        }
                    }
//while
                }
            }
            
catch (Exception ex)
            {
                err 
= ex.Message;
                
return false;
            }
            
return true;
        }
//解压结束
        #endregion

需要添加对SharpZipLib的引用:

using ICSharpCode.SharpZipLib.Zip;

 

案列二:

1、创建zip文件,并添加文件:

using (ZipFile zip = ZipFile.Create(@"E:\test.zip")) 

    zip.BeginUpdate(); 
    zip.Add(
@"E:\文件1.txt"); 
    zip.Add(
@"E:\文件2.txt"); 
    zip.CommitUpdate(); 

 

2、将文件夹压缩为文件

(new FastZip()).CreateZip(@"E:\test.zip"@"E:\test\"true"");

 

最后一个参数是使用正则表达式表示的过滤文件规则。CreateZip方法有3个重载版本,其中有目录过滤参数、文件过滤参数及用于指定是否进行子目录递归的一个bool类型的参数。

3、将文件添加到已有zip文件中

using (ZipFile zip = new ZipFile(@"E:\test.zip"))
{
    zip.BeginUpdate();
    zip.Add(
@"E:\test.doc");
    zip.CommitUpdate();
}

 

4、列出zip文件中文件

using (ZipFile zip = new ZipFile(@"E:\test.zip"))
{
    
string list = string.Empty;
    
foreach (ZipEntry entry in zip)
    {
        list 
+= entry.Name + "\r\n";
    }
    MessageBox.Show(list);
}

 

5、删除zip文件中的一个文件

using (ZipFile zip = new ZipFile(@"E:\test.zip"))
{
    zip.BeginUpdate();
    zip.Delete(
@"test.doc");
    zip.Delete(
@"test22.txt");
    zip.CommitUpdate();
}

 

 6、解压zip文件中文件到指定目录下

(new FastZip()).ExtractZip(@"E:\test.zip"@"E:\test\""");

 

7、常用类

ZipInputStream、GZipInputStream用于解压缩Deflate、GZip格式流,ZipOutputStream、GZipOutputStream用于压缩Deflate、GZip格式流。
StreamUtil类包含了几个Stream处理辅助方法:
  1) Copy(Stream, Stream, Byte[])用于从一个Stream对象中复制数据到另一Stream对象。有多个重写。
  2) ReadFully(Stream, Byte [])用于从Stream对象中读取所有的byte数据。有多个重写

 

PHP生成PDF文档的两种方式及HTML2PDF

 

PHP生成PDF文档的两种方式及HTML2PDF

一、PHP手册中提到的,用dll文件的扩展库,使用pdflib(下载地址:http://www.pdflib.com/download/pdflib-family/pdflib-7/)。

1.下载dll组件。

2.放在AppServ\php5\ext(即php扩展文件夹)下。

3.修改PHP.INI,增加extension=libpdf_php.dll这句,一般都在最后添加。

4.重启服务器。

缺点:因为pdflib是盈利的,但提供免费下载,只不过免费版的会在生成的PDF文件上面有水印,影响美观。

二、使用fpdf类,比较常见的方法,因为开源,文件下载地址:http://www.fpdf.org/,还有多国语言的手册,很不错。

无需修改任何设置,只要引入文件即可。

缺点:对中文支持不是很好,需要自己扩展。

三、HTML2FPDF:http://html2fpdf.sourceforge.net/下载类文件

实例:

<?

require_once('html2fpdf.php');

// activate Output-Buffer:

ob_start();

?>

<html>

<head>

<title>HTML 2 (F)PDF Project</title>

</head>

<body>

<div align="center"><img src="logo.gif" alt="HTML 2 PDF logo" /></div>

<h2 align="center">HTML 2 PDF Project</h2>

Below are the descriptions of each MENU button:

<ul>

<li><b><font color="red">HOME</font></b> - Returns to the main page (this one)</li>

<li><b>FEATURES</b> - Explains the script's main features</li>

<li><b>EXAMPLES</b> - A series of examples in which the script works</li>

<li><b>CLASS-DOC</b> - Some documentation about the used classes</li>

<li><b>LICENSE</b> - In case you want to distribute or modify the code</li>

<li><b>CREDITS</b> - (the name says it all)</li>

<li><b>FAQ</b> - Frequently asked questions...and answers!</li>

</ul>

<p>This project is hosted on Source Forge. DOWNLOAD IT <a

href="http://sourceforge.net/projects/html2fpdf" target="_blank">THERE</a>!</p>

This script was written on PHP 4.3.3 (should work on 4.0 and greater)

<br /><br />

<div style='background:#ccc;border:thin dashed black'>

This page was dinamically created using PHP ob_get_contents and HTML2FPDF

class.<br />

Read more on FAQ on how to make this or check the 2<sup>nd</sup> page (use the

'PageDown' keyboard key)</div><newpage>

<div style='background:#eee;font-weight:bold'><code>

<? $metaphp = htmlspecialchars($metaphp);

$metaphp = str_replace("\n",'<br>',$metaphp);

echo "&lt;?".$metaphp."?&gt;"; ?>

</div></code>

</body>

</html>

<?

// Output-Buffer in variable:

$html=ob_get_contents();

// delete Output-Buffer

ob_end_clean();

$pdf = new HTML2FPDF();

$pdf->DisplayPreferences('HideWindowUI');

$pdf->AddPage();

$pdf->WriteHTML($html);

$pdf->Output('doc.pdf','I');

?>