2016-09-20 37 views
0

現在有一段時間了,我已經使用wkhtmltopdf進行pdf文檔的即時生成,並且一般來說它遠遠領先於包(與php中的其他工具相比)。如何解決wkhtmltopdf中的javascript或http錯誤?

然而,這是一個巨大的痛苦,甚至做這個過程的最基本的調試。 使用您的常規瀏覽器,可能需要alert(var);console.log(var);,並發現「var」爲undefined。再次,您可以輕鬆地在瀏覽器控制檯的某個地方看到404500 http錯誤。

就拿這一點:

wkhtmltopdf.exe http://localhost/mypage.html C:/temp/myfile.pdf 

的PDF文件無法得到創建,但因爲不完善依賴於javscript或AJAX某些方面的缺失。

隨着wkhtmltopdf,如何最好地調查這些錯誤,如果他們存在mypage.html

回答

2

您需要使用--debug-javascript命令行選項。我測試了它在Linux中,但它可能是相同的Windows:

$ echo '<script>console.log("YAY!");</script>' > test.html 
$ wkhtmltopdf --debug-javascript test.html test.pdf 
Loading pages (1/6) 
Warning: file:///tmp/test.html:1 YAY! 
Counting pages (2/6) 
Resolving links (4/6) 
Loading headers and footers (5/6) 
Printing pages (6/6) 
Done 

對於404和500錯誤,wkhtmltopdf應打印在命令行上的一些東西太多,如果我記得很清楚。

+0

謝謝@ lorenzo-s:隧道盡頭的曙光。當我在命令行上運行raw命令時,我得到了一些神祕的東西:'Warning:undefined:0 TypeError:'null'不是一個對象'。現在,我實際上是通過php調用wkhtmltopdf。現在,使用'shell_exec()'和'exec()',它們都不會在php中提供任何輸出!你能幫忙嗎? –

+0

'TypeError:'null'不是一個對象':可能你試圖訪問空引用上的一個屬性。不幸的是,它不會告訴你在哪裏,所以我最好的猜測是添加隨機的'console.log()'並搜索它停止的那一行。從PHP調用'wkhtmltopdf'不會改變任何東西,你不能看到輸出,因爲它在stderr上,而不是標準輸出。我不知道它在Windows上的工作原理,但在Linux上,你必須在命令後附加'2>&1'。 –

+0

我堅持測試的命令行,並沒有打擾PHP輸出問題。是的,我最終能夠使用逐行'console.log()'來跟蹤有問題的腳本塊。事實上,我今天學到的最偉大的事情是,你實際上可以用wkhtmltopdf來設置'console.log'!非常感謝。 –

1

對我來說,你應該首先在瀏覽器中打開源代碼頁。您的瀏覽器的調試器可以跟蹤這些問題。一旦你知道該頁面是完美的,你可以通過wkhtmltopdf運行它。

+0

Thanks @Ben for your input。源頁面確實工作得很好,但不是PDF。 –

+0

如果頁面的元素正在JavaScript中構建,則可能是wkhtmltopdf簡單內部不正確處理它。如果可以,我會嘗試儘可能在純HTML/CSS中重建頁面。 –

+0

如果失敗,您可以隨時嘗試使用TCPDF來完全控制輸出的PDF。它給你完全的控制,但是以陡峭的學習曲線爲代價。如果你急需一些東西,這不是一種選擇。 –

相關問題