2015-11-06 72 views
0

我想使用Codeignitor,PhantomJS創建一個網頁的PDF,我正在使用Linux操作系統。我有一個與exec()的phantom_helper文件。我從here得到了一些代碼。我能夠創建pdf文件,當我在linux終端窗口上運行phantomjs /var/www/PhantomJS/js/rasterize.js http://google.com /var/www/PhantomJS/pdf/Test.pdf。在這裏,我補充說,我有代碼,PhantomJS不能與codeignator + exec()

控制器

public function index() 
{ 
    $this->load->helper('phantomjs'); 
    $this->load->helper('url'); 
    $viewbox['generationStatus'] = 'PDF Generation successful'; 
    $url = 'http://google.com'; 
    $filename = strtotime(date('Y-m-d H:i:s')).'.pdf'; 
    $resp = rasterize_wrapper($url,$filename); 
    $viewbox['filename'] = $resp; 
    if($resp == 0) 
    { 
     $viewbox['filename'] = ''; 
     $viewbox['generationStatus'] = 'PDF Generation failed'; 
    } 
    $this->load->view('welcome_message',$viewbox); 
} 

Phanthom_helper

if (! function_exists('rasterize_wrapper')) 
    { 
     function rasterize_wrapper($url='', $output=''){ 
      if($url=='' || $output=='') 
      { 
       show_error('URL or Output file name not defined correctly'); 
       log_message('error','rasterize_wrapper: not initialized'); 
       exit; 
      } 
      $url = escapeshellcmd($url); 
      exec('phantomjs '.realpath('js/rasterize.js').' '.$url.' '.realpath('pdf').'/'.$output,$output_status, $return_status); 
      if($return_status == '0'){ return $output;} 
      return 0; 
     } 
    } 

Rasterize.js

var page = new WebPage(); 
if (phantom.args.length < 2 || phantom.args.length > 3) { 
    console.log('Usage: rasterize.js URL filename'); 
    phantom.exit(); 
} else { 
    address = phantom.args[0]; 

    output = phantom.args[1]; 
    page.viewportSize = { width: 600, height: 600 }; 
    page.open(address, function (status) { 
     if (status !== 'success') { 
      console.log('Unable to load the address!'); 
     } else { 
      window.setTimeout(function() { 
       page.render(output); 
       phantom.exit(); 
      }, 200); 
     } 
    }); 
} 
+0

對不起朋友,這段代碼實際上工作。這個問題是因爲我使用Linux,所以我必須爲pdf保存文件夾設置文件夾權限。我已經設置並獲得了pdf。 TY。 – Sinto

+0

有誰知道爲什麼在服務器上運行時沒有看到css&text。我正在獲取本地系統中的所有數據。? – Sinto

回答

0

我解決了問題。這段代碼實際上工作。這個問題是因爲我使用Linux的,所以我必須爲pdf保存文件夾設置文件夾權限。我已經設置&得到了pdf。通過執行媒體查詢@media print {....} Ty也解決了Css問題。