436 1234
发新话题
打印

Zend 框架学习之创建 PDF 文件篇

根据用户的选择过滤 PDF

现在,为了执行这一任务,我们需要找到 createPdfAction() 函数中的复选框。


清单 23. 过滤 PDF
复制内容到剪贴板
代码:
...
    public function createPdfAction()
    {
...
        $sql = $select->__toString();
        $entries = $db->fetchAll($sql);

        $startPos = $topPos - 120;

        $filterPost = Zend::registry('fPost');


        foreach($entries as $row){

            if($filterPost->getRaw($row['id']) == "on"){

                $title = $row['feedname'];
                $entrydata = $row['entrydata'];
...
                    $page->drawText($line, 48, $startPos);
                    $startPos = $startPos - 16;

                }
                $startPos = $startPos - 16;
            }
        }

        array_push($pdf->pages, $page);

        header('Content-type: application/pdf');
        echo $pdf->render();

    }
...
这个过程也是一目了然。首先从注册表中获得在本系列之前部分使用的过滤器,然后使用该过滤器获得用于复选框的值,该值对应于将被计算的当前条目的 ID 值。

如果提交表单时选中了该复选框,则其值为 on,并且程序把条目包含到 PDF 中。如果未选中,则跳过该条目。最后的结果是一个只包含经过明确请求的条目的 PDF 文档。

TOP

编辑现有的 PDF:添加选项

最后,我们想要让用户能够选择是否使用现有的 PDF,而不是创建一个新的 PDF。这是一种能够让用户为已保存条目创建备份的便利方式。例如,如果用户收集了几十条甚至几百条已保存条目,那么他能够将这些条目添加到 PDF 文件中,并从系统中删除这些条目。当需要添加更多的条目时,用户可以选择使用以前的 PDF 文件。此功能可在文档末尾添加新条目。

首先,通过为 viewSaveEntries.php 文件添加一个复选框来实现对现有 PDF 的选择。


清单 24. 选择使用现有 PDF
复制内容到剪贴板
代码:
...
         if($row['channelname'] != ''){
             $title = "$title > $channelTitle";
             $type = 'rssFeed';
         } else {
             $type = 'webPage';
         }
         $id = $row['id'];
         echo "<tr><td><a href='$link'>$title</a></td>";
         echo "<td><input type='checkbox' name='$id'\
         checked='checked'></td></tr>\n";
     }
?>
  </table>
  Start with existing PDF: <input type='checkbox'

name='startExisting' /><br /><br />
  <input type='Submit' value='Create PDF'>
  </form>
</body>
</html>
此代码将复选框添加到了表单的尾部。

TOP

编辑现有 PDF:添加页面

要使用现有的 PDF,则需要对 createPdfAction() 函数进行一些更改。


清单 25. 将页面添加到现有的 PDF 文档中
复制内容到剪贴板
代码:
...
    public function createPdfAction()
    {

        require_once 'Zend/Pdf.php';

        $filterSession = Zend::registry('fSession');
        $username = $filterSession->getRaw('username');

        $filterPost = Zend::registry('fPost');
        $startExisting = $filterPost->getRaw('startExisting');

        $pdf = '';
        if ($startExisting == 'on')
        {
            if (file_exists($username.'.pdf'))
            {
                $pdf = Zend_Pdf::load($username.'.pdf');
            }
            else
            {
                $pdf = new Zend_Pdf();
            }
        }
        else
        {
            $pdf = new Zend_Pdf();
        }

        $page = $this->newPdfPage();
        $chompImage = new Zend_Pdf_Image_JPEG(
                        'E:\sw\public_html\chomp.jpg');

...
                }
                $startPos = $startPos - 16;
            }
        }

        array_push($pdf->pages, $page);

        $pdf->save($username . '.pdf');

        header('Content-type: application/pdf');
        echo $pdf->render();

    }
...
首先要注意的是,对用户名的检测被移至函数的顶部,因为如果存在已有的 PDF 文件,该文件会以 username.pdf 的形式命名。其次,如果用户选择使用已有的 PDF,那么需要检测是否已经存在这样一个 PDF。如果存在,则用 load() 函数将文档装载为 $pdf 对象。如果不存在,或者如果用户选择不使用已有文档,则创建一个新文档。

从这开始,处理过程就和以前完全一样了,除了一点,即在将 PDF 呈递给浏览器前,我们会把它保存到服务器中,以备下次使用。

TOP

第 7 页,共 11 页  


对本教程的评价
  帮助我们改进这些内容




结束语

Chomp 在线提要阅读器现在就开始成型了。用户可以注册帐户、订阅提要并阅读它们。现在用户可以将保存的条目作为 PDF 文档输出。为实现这一点,我们将使用 Zend 框架的 Zend_PDF 组件来创建新的 PDF、添加图形、图像和文本,并对它们加以保存。我们还探讨了如何直接将 PDF 输出到浏览器中,以及如何使用现有的 PDF 代替创建新的 PDF。

另外,我们还探讨了如何通过手工构建 PDF 的方式解决一些问题,比如不能够自动换行和无法自动将新页面添加到文档中。

第 6 部分中,将介绍当更新用户喜爱的提要时如何向用户发送 e-mail。

TOP

本章相关代码下载
描述名字大小下载方法
Part 5 source codeos-php-zend5.source.zip18.5KBHTTP

TOP

   很好!  

TOP

 436 1234
发新话题