在 CodeIgniter 3

问题描述

提前致谢...

我正在尝试使用 fpdi 和 tcpdf 库在 CodeIgniter 中使用以下代码生成 pdf...

<?PHP
use setasign\Fpdi;

require_once('tcpdf/tcpdf.PHP');
require_once('fpdi2/autoload.PHP');

class Pdf extends Fpdi\Tcpdf\Fpdi
{
    /**
     * "Remembers" the template id of the imported page
     */
    protected $logo;

    /**
     * Draw an imported PDF logo on every page
     */
    function Header()
    {
        if ($this->logo === null) {
            $this->setSourceFile(base_url().'assets/pdf/logo.pdf'); //Will work if these 3 lines are commented
            $this->logo = $this->importPage(1);                     //Will work if these 3 lines are commented
        }
        $size = $this->useImportedPage($this->logo,130,5,60);    //Will work if these 3 lines are commented

        $this->SetFont('freesans','B',20);
        $this->SetTextColor(0);
        $this->SetXY(PDF_MARGIN_LEFT,5);
        $this->Cell(0,30,'TCPDF and FPDI');
    }
}

// initiate PDF
$pdf = new Pdf();
$pdf->SetMargins(PDF_MARGIN_LEFT,40,PDF_MARGIN_RIGHT);
$pdf->SetAutopageBreak(true,40);

// add a page
$pdf->AddPage();

$pdf->Write(5,"hello world");

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

?>

如果我注释我在内嵌注释中提到的行,它会运行并生成 pdf,但会生成错误

类型:invalidargumentexception 消息:给定的流不可搜索

当我取消注释这些行时。 该代码在 codeigniter 之外的本地服务器中工作。 我能够将 pdf 嵌入到另一个视图中,因此这不是 pdf 的问题,也不是从我的资产文件夹访问 pdf 的限制。 当我尝试加载外部字体时会发生同样的问题。 控制器以这种方式调用视图...

class Projects extends CI_Controller{
        public function fpdi(){
            $this->load->view('projects/fpdi');
        }
}

非常感谢! (请注意,这是对问题的过度简化,我没有在视图中加载库,这只是为了演示目的使问题尽可能简洁) edit-UPDATE 用 fpdf 尝试了同样的事情,但我仍然得到同样的错误“给定的流不可搜索”。

更新2!感谢 Jan Slabon 的建议,我解决了这个问题,用 CodeIgniter 常量 FCPATH 替换了 base_url() 助手,因此路径是相对的而不是 URL。显然,这是 fopen 正常运行所必需的,fpdi 库使用了它。

我不知道更多,我觉得这是不雅的解决方案,但它现在有效!如果有人有更多信息,将不胜感激。

解决方法

将源从 base_url() 更改为相对路径 FCPATH。 (更多信息在问题底部。)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...