【问题标题】:Using Zend_PDF and Zend Framework, Loading Libraries in PHP?使用 Zend_PDF 和 Zend 框架,在 PHP 中加载库?
【发布时间】:2015-07-21 22:39:58
【问题描述】:

我是 PHP 新手,只使用过一点 LAMP 堆栈。我想使用 Zend_PDF 来使用 PHP 填写表格。我遇到了问题,并且相信我不知道如何正确加载 Zend Framework(或一般的外部库)。这是我目前拥有的:

<?php 
include_path='.:/var/www/html/lib/'; 
require_once'.:/var/www/html/lib/Zend/Loader/ClassMapAutoloader.php';
$pdf = Zend_Pdf::load('.:/var/www/html/forms/test.pdf');

echo count($pdf->pages);
?>

我使用count(); 作为测试,但我希望使用setTextField(); 函数。我没有一些指南中提到的“/Loader/Autoloader.php”。

如何正确加载库以便可以使用setTextField(); 函数?

PHP 5.4.16, Zend 框架 2.4.4, CentOS7

【问题讨论】:

    标签: php pdf zend-framework zend-pdf


    【解决方案1】:

    您的问题存在一些问题。

    首先,你上面提到的Zend_Pdf属于ZF1,不是ZF2。如果您真的在谈论 ZF2,那么该类称为 ZendPdf 并且可以用作独立组件 - 您不需要有 ZF2 的完整副本可用于自动加载(composer 将生成一个自动加载器 - 您只需需要在你的脚本中require)。上次我检查时(诚然,那是几年前),这两个版本在功能上是等效的,所以您应该只使用与您实际使用的 Zend Framework 版本相匹配的版本。

    这让我想到了下一个问题。因为我不完全确定你指的是哪个版本,所以我做了一个快速的文本搜索,发现setTextField()方法只存在于ZF1的Zend_Pdf,而不是与ZF2相关的ZendPdf类,所以我不确定您为什么在问题中提到 ZF2。但无论如何,在我发现之前我就想出了如何让 ZF2 版本工作,所以为了完整起见,我在下面包含了这两种方法。

    另外,您的require_once 语句中有一个错误 - 它不应该在开头包含“.:”。现在开始我的实际答案。

    从 Zend Framework 1 Standalone 加载 Zend_Pdf

    这应该可行:

    set_include_path( '/path/to/zf1/library' . PATH_SEPARATOR . get_include_path());
    require_once( '/path/to/zf1/library/Zend/Loader/Autoloader.php' );
    Zend_Loader_Autoloader::getInstance();
    
    $pdf = new Zend_Pdf();
    
    $pdf->pages[0] = new Zend_Pdf_Page( Zend_Pdf_Page::SIZE_A4 );
    $pdf->pages[0]->setFont(Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA), 24 );
    
    $pdf->pages[0]->drawText( "Hello world!", 240, 400 );
    
    $pdf->save( 'example.pdf' );
    

    您显然需要调整上面代码中的路径以使其正常工作,但是一旦您这样做并运行脚本,您最终应该会创建 example.pdf。

    从 Zend Framework 2 Standalone 加载 ZendPdf

    使用项目页面上的说明从 github (https://github.com/zendframework/ZendPdf) 下载 ZendPdf 项目,或者如果您愿意,可以使用 git 直接克隆存储库。

    进入ZendPdf所在的目录,运行composer install下载支持文件。

    在同一目录(即ZendPdf 的项目根目录)中,创建一个名为test.php 的文件,其内容如下:

    require 'vendor/autoload.php';
    
    use ZendPdf\PdfDocument;
    use ZendPdf\Page;
    use ZendPdf\Font;
    
    $pdf = new PdfDocument();
    
    $pdf->pages[0] = new Page( Page::SIZE_A4 );
    $pdf->pages[0]->setFont( Font::fontWithName( Font::FONT_HELVETICA ), 24 );
    $pdf->pages[0]->drawText( 'Hello world!', 240, 400 );
    
    $pdf->save( 'example.pdf' );
    

    运行php test.php,应该会创建example.pdf文件。

    第二个解决方案的魔力来自composer,它会为您创建autoload.php 文件。使用这种方法有很多很多好处,其中之一是您不必为了获得一个正常工作的自动加载器而安装 Zend Framework 2 的完整副本。

    【讨论】:

    • 多么棒的答案,非常感谢。我指的是 ZF2,但没有意识到 Zend_Pdf 仅在 ZF1 中。经过测试,ZendPdf 似乎无法编辑文本字段,只能绘图。我想我会玩一段时间的坐标。感谢您的帮助!
    • 不客气 - 很高兴我能帮上忙。祝你编码好运!
    • 我还有一个问题,如果您仍然可以帮助我。 '$filename = 'new.pdf'; $pdf->保存($文件名);' '$filename = '/forms/new.pdf'; $pdf->保存($文件名);'没有。如何在其他目录中保存/打开?
    • 当您尝试保存到 /forms 目录时会发生什么?您是否收到一条消息说“无法打开 '/forms/new.pdf' 进行写作”?如果是这样,很可能是文件权限问题。您需要确保您尝试将文件保存到 (A) 的目录存在并且 (B) 可由运行脚本的用户(或组)写入。
    • 看起来就是这样,并将其更改为“forms/new.pdf”。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 2012-03-10
    • 2011-09-03
    • 1970-01-01
    • 2012-02-26
    • 2011-02-20
    • 1970-01-01
    相关资源
    最近更新 更多