0

我想使用这个库: http: //www.princexml.com/这可以帮助我从 HTML/XML 文件创建 PDF 文件。

我的控制器上有这个:

public function banana(){

    $this->load->library('prince');

    $prince = new Prince('http://localhost/prince/prince.exe');


    $xmlPath = 'http://localhost/temp/test.html'; 

    $this->prince->convert_file_to_passthru($xmlPath);


}

我得到了这些错误:

遇到 PHP 错误

严重性:警告

消息:Prince::__construct() 缺少参数 1,在第 1247 行的 C:\wamp\www\tools\system\core\Loader.php 中调用并定义

文件名:库/prince.php

行号:48

回溯:

文件:C:\wamp\www\tools\application\libraries\prince.php 行:48 功能:_error_handler

文件:C:\wamp\www\tools\application\controllers\aso\Cli_kas.php 行:304 功能:库

文件:C:\wamp\www\tools\index.php 行:292 功能:require_once

遇到 PHP 错误

严重性:通知

消息:未定义的变量:exePath

文件名:库/prince.php

行号:50

回溯:

文件:C:\wamp\www\tools\application\libraries\prince.php 行:50 功能:_error_handler

文件:C:\wamp\www\tools\application\controllers\aso\Cli_kas.php 行:304 功能:库

文件:C:\wamp\www\tools\index.php 行:292 功能:require_once

遇到 PHP 错误

严重性:警告

消息:proc_open(): CreateProcess 失败,错误代码 - 87

文件名:库/prince.php

行号:796

回溯:

文件:C:\wamp\www\tools\application\libraries\prince.php 行:796 功能:proc_open

文件:C:\wamp\www\tools\application\libraries\prince.php 行:528 功能:convert_internal_file_to_passthru

文件:C:\wamp\www\tools\application\controllers\aso\Cli_kas.php 行:311 功能:convert_file_to_passthru

文件:C:\wamp\www\tools\index.php 行:292 功能:require_once

遇到未捕获的异常

类型:异常

消息:无法执行 "" --structured-log=buffered " http://localhost/temp/test.html " -o -

文件名:C:\wamp\www\tools\application\libraries\prince.php

行号:814

回溯:

文件:C:\wamp\www\tools\application\libraries\prince.php 行:528 功能:convert_internal_file_to_passthru

文件:C:\wamp\www\tools\application\controllers\aso\Cli_kas.php 行:311 功能:convert_file_to_passthru

文件:C:\wamp\www\tools\index.php 行:292 功能:require_once

这是我第一次从 CodeIgniter 运行外部库,我不知道该怎么做,并且 codeigniter 文档没有提到太多信息。

创建 ALIAS 不起作用,所以我认为这就是它无法识别exePath.

我如何使用所有“Prince”库并让它在 CodeIgniter 上运行?

4

2 回答 2

0

在 CI 上使用“Prince”作为库:

  1. 将 Prince.php 添加到库文件夹 (/application/library/Prince.php) 并确保文件名的第一个字母大写。

  2. 要将变量传递给库,必须使用数组而不是简单的字符串来完成。 $exePath = array('exePath' => 'C:\Program Files (x86)\Prince\engine\bin\prince.exe');

    public function banana(){ // it should be a local path instead of URL $exePath = array('exePath' => 'C:\Program Files (x86)\Prince\engine\bin\prince.exe');

    // you can add parameter for the constructor call
    $this->load->library('prince', $exePath);
    // it also should be a local path where the folder should be writable by apache
    $xmlPath = 'C:\wamp\www\tools\files\banana\test.html';
    $pdfPath = 'C:\wamp\www\tools\files\banana\test.pdf';
    $this->prince->convert_file_to_file($xmlPath, $pdfPath);
    

    }

  3. 该构造将变量作为数组而不是应有的字符串!所以我编辑__construct了一点:

    public function __construct($exePathArr) { // var_dump($exePathArr); $exePath = "banana"; // just to make sure that this var is a string :P // var_dump($exePath); $exePath = $exePathArr['exePath']; // var_dump($exePath); $this->exePath = $exePath; $this->styleSheets = ''; $this->scripts = ''; ... ....... ..........

这是在“Prince”网站上打开的帖子:http: //www.princexml.com/forum/topic/3318/princexml-and-codeigniter-how-to-add-the-library?p=1#16234

希望这也能帮助有需要的人。

我在 WAMP 和 UBUNTU SERVER 上都对此进行了测试。

于 2016-03-06T12:05:12.100 回答
0

你应该试试这个:

public function banana(){
    // it should be a local path instead of URL
    $exe_path = 'c:\\some_folder\prince\prince.exe';
    // you can add parameter for the constructor call
    $this->load->library('prince', $exe_path);
    // it also should be a local path where the folder should be writable by apache
    $xmlPath = 'c:\\some_folder\temp\test.html';

    $this->prince->convert_file_to_passthru($xmlPath);
}
于 2016-03-04T14:36:51.723 回答