2017-06-22 37 views
0

這已經得罪我了昨天,我剛出來的想法。不能寫完整的HTML到PDF

我想寫一個PDF一個子類pdfkit.PDFKit(姑且稱之爲MyPDFKit):它工作得很好(我只是子類它添加在ARGS使用xvfb-run的可能性)。我指定不是類的問題。

我嘗試了一些HTML轉換爲PDF。模板看起來是這樣的:

<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="utf-8"> 
    <!-- Simplified for reading. --> 
    <style type="text/css">..</style> 
    </head> 
    <body> 
    <!-- Simplified for reading. --> 
    {% for obj in objs %} 
    <div> 
     <div> 
     <p>{{ obj.name }}</p> 
     </div> 
     <p>{{ obj.age }}</p> 
    </div> 
    {% endfor %} 
    </body> 
</html> 

有了這些模板,objs具有接近400種情況下,HTML的輸出是近5K線。

當試圖將其轉移到文件中時會出現問題。這可能是在這兩個地方之一:

  1. MyPDFKit.to_pdf(..)(從MyPDFKit.from_string(..)調用)的stdout具有極限尺寸,並截斷字符串的一部分(該功能的源代碼是here)。
  2. f.write(..)是捨去你在傳遞字符串的一個。

不能在模板或對象的數據的問題,因爲我只得到了一定範圍內的,然後當正確地創建PDF文件(由於HTML的行數,在相同的渲染中超過350個項目開始導致該問題)。例如,objs[:315]效果不錯,但不是objs[:350]

我試着將緩衝區大小設置爲-1,這是無限的,但也不起作用。任何人有過這個問題嗎?

回答

0

好了,最後,與其他程序員的幫助下,我找到了問題。

它看起來像PDFKit,處理大量的HTML的時候(在PDF頁面的數量,我們正在談論超過349更多或更少),發送進度條評論緩衝區,看看它是如何去。然後,當它完成時,還會發送完成的評論消息。

這個評論(我說給他們一種數據的評論,因爲我不知道PDF文件是如何處理評論的),在Adobe Reader等程序中無法處理,所以它檢測到文件已損壞/損壞,而在像SumatraPDF/Edge這樣的程序中,它只是忽略,然後很好地顯示PDF。

現在,如何防止這種行爲?通過了--quiet的說法。但是,對於這一點,你需要繼承PDFKit(如我MyPDFKit所做的那樣),以及手動添加argsline of code)。

問題解決。

編輯

看來,我可以通過在options kwargs --quiet,因此無需子類的,如果這是唯一的問題(雖然這將是很好有它積極的默認...)