2012-05-08 45 views
0

我一直試圖讓wkhtmltopdf轉換網站上的頁面,並且它無法轉換相同的頁面。它會轉換和存儲外部頁面(嘗試它與谷歌和bbc.co.uk,都工作),所以權限很好,但如果我嘗試轉換本地頁面,無論是靜態HTML文件或腳本生成的,大約需要3分鐘才能失敗。wkhtmltopdf無法將本地頁面轉換爲PDF

輸出表示頁面加載失敗,如果強行忽略這一點,我會得到一個空白的PDF。

我認爲這可能是會話鎖定,但關閉會話導致相同的問題。我覺得這件事情到該服務器可表現雖然

這裏是有問題的代碼的方式:

  session_write_close(); 
    set_time_limit (0); 
      ini_set('memory_limit', '1024M'); 
    Yii::app()->setTheme("frontend"); 

    // Grabbing the page name 
    $ls_url = Yii::app()->request->getHostInfo().Yii::app()->request->url; 

    // Let's remove the PDF otherwise we'll be in endless loop 
    $ls_url = str_replace('.pdf','',$ls_url); 

    // Setting paths 
    $ls_basePath = Yii::app()->basePath."/../extras/wkhtmltopdf/"; 
    if(PHP_OS=="Darwin") 
     $ls_binary = $ls_basePath . "wkhtmltopdf-osx"; 
    else 
     $ls_binary = $ls_basePath . "wkhtmltopdf"; 

    $ls_generatedPagesPath = $ls_basePath . "generated-pages/"; 
    $ls_outputFileName = str_replace(array("/",":"),"-",$ls_url)."--".date("dmY-His").".pdf"; 
    $ls_outputFile = $ls_generatedPagesPath. $ls_outputFileName; 

    // making sure no nasty chars are in place 
    $ls_command = escapeshellcmd($ls_binary ." --load-error-handling ignore " . $ls_url . " " . $ls_outputFile); 


    // Let's run things now 
    system($ls_command); 
+0

第一步爲我調試wkhtmltopdf是硬編碼'shell_exec()'中的命令。如果這有效,你知道這不是一個wkhtmltopdf問題。在處理其他事情之前,我會得到一行代碼與本地副本一起工作。 – Chords

+0

_但是如果我嘗試轉換一個本地頁面......在失敗之前需要大約3分鐘 - 是否也是如果從命令行運行它的情況? – halfer

回答

2

做你lynx,準確的網址是什麼?因爲wkhtmltopdf實際上是小而強大的webkit瀏覽器,它就像一個普通的瀏覽器一樣失敗。

檢查您提供的網址,檢查您網頁中的外部網址是否可以從您的服務器訪問。它加載CSS,外部圖像,iframe,甚至在它開始製作PDF之前的所有內容。

就我個人而言,我喜歡wkhtmltpdf。沒有什麼比它好。

+0

剛剛與Lynx進行了測試。完全相同的症狀,本地地址需要30秒沒有輸出(大概是失敗),谷歌快速返回輸出。看起來這是服務器配置的東西。任何想法可能會導致它?我的主機是否像將apache鎖定到單個進程一樣? – user1031348

+0

表示它不是wkhtmltpdf。你在URL中使用localhost嗎?嘗試在您的服務器中ping您的URL的域名。如果你不能表示你的域名解析爲你的IP,這是你的防火牆+ NAT選擇的,所以你永遠不能通過外部IP連接你自己。 – thevikas

+0

它一直在通過Yii生成的url進行操作,在這種情況下,它是一個IP地址(域目前未處於活動狀態)。 ping失敗了,所以它看起來很可能被防火牆擋住了。我以爲我試過讓所有通過端口80,但它看起來像有一些額外的措施,我無法訪問。看起來我可能不得不給我的主人打個電話。 – user1031348