如何解决在 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 举报,一经查实,本站将立刻删除。