Zend Framework PDF 最重要的部分也是最常用的类就是 Zend_Pdf_Page 类了. 这个类的用法比较灵活. 具体的来看看这个小家伙.
首先介绍一下这个类定义一个很有常用的参数, 也就是页面规格. 常规的, 它提供了2种类型的尺寸, 一种是我们打印机常用的A4纸张尺寸. 宽:595 高:842, 是个常变量, 叫: Zend_Pdf_Page::SIZE_A4 这个是默认的也就是竖向的, 有时候我们会在WORD等软件里把页面打印时设置为横向的. 这个只是把宽和高互换了一下. 看你自己喜欢那种风格的排版了. 横向的尺寸变量名叫: Zend_Pdf_Page::SIZE_A4_LANDSCAPE, 此外还提供了另外一个常用的页面尺寸. 就是信纸规格的. 宽是:612 高是: 792, 变量名叫: Zend_Pdf_Page::SIZE_LETTER, 当然这个也是竖向的. 也可以使用横向的. 变量名是: Zend_Pdf_Page::SIZE_LETTER_LANDSCAPE.
Zend_Pdf_Page 还定义了其他的页面常数. 方便使用. 其他的先不深入, 一个一个玩过来. 当建立好一个PDF对象了后, 最重要的就在这个文档中放入一页文档, 不然这个PDF文件被PDF阅读器打开是会报错的. Zend_Pdf_Page 的构造器提供了非常强悍灵活的功能. 新建立一个页面对象时: new Zend_Pdf_Page($param1, $param2 = null, $param3 = null); 这3个参数非常的灵活.
第一种用法: 最简单的. 就是建立一个新文档. 什么也没有. 就只建立一个新文档. 只要告诉 Zend_Pdf_Page 这个文档的尺寸即可.
比如建立一个空白页,竖向的, 尺寸是常见的A4大小.
$page = new Zend_Pdf_Page(Zend_Pdf_Page::SIZE_A4);
如果使用 SIZE_A4_LANDSCAPE 就可以建立一个横向的A4空白页
$page = new Zend_Pdf_Page(Zend_Pdf_Page::SIZE_A4_LANDSCAPE);
或者是信纸大小的页面,
$page = new Zend_Pdf_Page(Zend_Pdf_Page::SIZE_LETTER);
$page = new Zend_Pdf_Page(Zend_Pdf_Page::SIZE_LETTER_LANDSCAPE);
可以看到, 我们只用了 Zend_Pdf_Page 构造器参数的第一个参数, 如果我们要自己定义一个尺寸的文档怎么办呢? 这样就用到 Zend_Pdf_Page 构造器的第二种方法.
第二种用法: 自定义PDF文档的宽度和高度.
如果要自定义PDF文档中的一页的宽度和高度的话, 可以给 Zend_Pdf_Page 构造器传入 2 个参数, 第一个是宽度值, 第二个是高度值. 其实就是这样 :
$page = new Zend_Pdf_Page($widthValue, $heightValue);
第三种用法: 克隆已有的页面模型.
比如已经建立了一个页面:
$tplPage = new Zend_Pdf_Page(Zend_Pdf_Page::SIZE_A4);
然后文档后门可能有很多页, 每页指定的信息是比较繁琐的. 如果以后模板要修改成其他尺寸的也不好办. 所有这个时候建立一个模板页就很有用了. 模板页建立后, 新建其他页时只要传入这个模板页对象就可以了. 所有新建的页面都和模板页面的通用信息一样的. 比如新建2个页面:
$page1 = new Zend_Pdf_Page($tplPage);
$page2 = new Zend_Pdf_Page($tplPage);
第四中用法: Zend_Pdf_Page的构造器在1.6.1版本时是提供了4类建立页面对象的方法, 后来版本就不知道会不会增加了. 我们看看现在这个构造器的最后一种用法.
在建立一个PDF文档时候, ZF提供了2种方法, 一种是load()方法, 一种是parse()方法, parse模式建立的PDF文档中, 其中文档里的页面可以提供给新的页面做模板, 类似刚才说的第三种用法, 只是模板页不是新生成的. 而是从已有的PDF文档中的一页提取出来的. 当然你要指定parse到的PDF文档的第几页做模板. 语法大概是这样:
$pdf = Zend_Pdf::parse($pdfString);
$page = new Zend_Pdf_Page($pdf, 2); //用第二页做模板.
注: 第四种用法只是看了 Zend_Pdf 代码包的源代码得出的结论. 因为这种模式我认为不会常用. 没具体的测试过这种模式. 如果有出入, 请通知我. 谢谢!
现在我们可以来建立一系列的空白文档来测试一下刚才所说的. 第4种方法不测试, 比较麻烦. 也不常用. 代码如下:
- <?php
- /**
- * PDF 空文档尺寸测试脚本
- *
- * @author: Guya
- * @email: camworkster@gmail.com
- */
- //生成一个PDF文档对象
- $pdf = new Zend_Pdf();
- //文件保存路径和名称
- $saveUri = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'pagesTest.pdf';
- //测试第一种用法: 建立两个空白A4页(一个竖向的和一个横向的), 并且加入到PDF文档中.
- $pageA4V = new Zend_Pdf_Page(Zend_Pdf_Page::SIZE_A4);
- $pageA4H = new Zend_Pdf_Page(Zend_Pdf_Page::SIZE_A4_LANDSCAPE);
- $pdf->pages[] = $pageA4V;
- $pdf->pages[] = $pageA4H;
- //建立两个空白信纸页(一个竖向的和一个横向的), 并且加入到PDF文档中.
- $pageLetterV = new Zend_Pdf_Page(Zend_Pdf_Page::SIZE_LETTER);
- $pageLetterH = new Zend_Pdf_Page(Zend_Pdf_Page::SIZE_LETTER_LANDSCAPE);
- $pdf->pages[] = $pageLetterV;
- $pdf->pages[] = $pageLetterH;
- //测试第二种用法: 建立一个空白自定义尺寸页,
- //设定宽 300, 高为 500, 数值小点方便查看. 并且加入到PDF文档中.
- $pageCustomSize = new Zend_Pdf_Page(300, 500);
- $pdf->pages[] = $pageCustomSize;
- //测试第三种用法: 建立一个空白页, 规格使用模板, 并且加入到PDF文档中.
- //这里使用自定以的页面做模板, 方便比较查看.
- $pageUseTpl = new Zend_Pdf_Page($pageCustomSize);
- $pdf->pages[] = $pageUseTpl;
- //一系列的空白页建立完了. 保存文件, 然后打开看看
- $pdf->save($saveUri);
放上生成的页面截图效果, 为了方便比较, 我把文件缩小到10%, 方便比较查看.
OK, 后续继续分享这个 Zend_Pdf_Page里有意思的方法, 我们要在这些空白文档里加入中文汉字, 加入图片, 加入... 加入你想加入的东西. O(∩_∩)O哈哈~