2017-06-22 15 views
0

これは昨日から私を怒らせていました。PDFに完全なHTMLを書き込むことができません

私はとPDFを書き込むしようとしているサブクラス化pdfkit.PDFKit(のはそれMyPDFKitを呼びましょう):それは(私は引数に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> 

、および400個のインスタンスの近くに持っobjs、HTMLの出力は、5kの行の近くにあります。

ファイルにスプラッシュしようとすると問題が発生します。これは、この二つの場所のいずれかであり得る:

MyPDFKit.from_string(..)から呼び出さ)
  1. MyPDFKit.to_pdf(..) 'はS stdout限界サイズを有し、そして文字列の一部(関数のソースコードであるhere)を切り捨て。
  2. f.write(..)はあなたが渡した文字列を切り捨てるものです。

、その後の唯一の特定の範囲を(取得するときに私が正しくPDFファイルを作成することができますので、テンプレートのまたはオブジェクトのデータの問題になることはできません。同じレンダリングで350以上のアイテムがHTMLの行数のために問題につながります)。たとえば、objs[:315]は正常に動作しますが、objs[:350]では正しく動作しません。

バッファサイズを-1に設定しようとしましたが、これは無制限ですが、動作しません。誰もがこの問題を以前に持っていましたか?

答えて

0

最後に、別のプログラマーの助けを借りて、私は問題を発見しました。

大量のHTMLを処理すると(PDFのページ数が349より多かったり多かったり)、進捗バーのコメントをバッファに送信してどのようになっているかを確認します。その後、終了すると、完了したコメントメッセージも送信されます。

Adob​​e Readerなどのプログラムでは、この種類のデータにコメントを付けて、実際にPDFファイルがどのように処理されるのかわからないため、このコメントは処理できないため、ファイルが壊れていることが検出されます/ damage、SumatraPDF/Edgeのようなプログラムでは、それを無視してPDFをうまく表示します。

今、この現象を防ぐにはどうすればよいですか? --quiet引数を渡します。しかし、そのためには、PDFKitをサブクラス化する必要があります(MyPDFKit)。argsを手動で追加してください(line of code)。

問題を解決しました。 EDIT

は、それが問題のみだ場合、私は(デフォルトではアクティブ持っていいだろうが...)options kwargsからは--quiet、そのサブクラス化の必要はありませんを渡すことができるようだ

関連する問題