微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 CodeIgniter 3

如何解决在 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。 (更多信息在问题底部。)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?