2011-09-11 8 views
1

を持っていない生成することは本当に典型的なものである:Djangoは - ピサはPDFが、私はPDFをレンダリングするためのDjangoと私のコードを使用していた空間

t = loader.get_template('back/templates/content/receipt.html') 
c = RequestContext(request, { 
          'pagesize': 'A4', 
          'invoice': invoice, 
          'plan': plan, 
          }) 

html = t.render(c) 
result = StringIO.StringIO() 
pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("UTF-8")), result) 
if not pdf.err: 
    return HttpResponse(result.getvalue(), mimetype="application/pdf") 

そしてreceipt.htmlは珍しいものではありません:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
    <title>Squizzal Receipt</title> 
    <style type="text/css"> 
     @page { 
      size: {{pagesize}}; 
      margin: 1cm; 
      word-spacing 1cm; 
      @frame footer { 
       -pdf-frame-content: footerContent; 
       bottom: 0cm; 
       margin-left: 9cm; 
       margin-right: 9cm; 
       height: 1cm; 
      } 
     } 
    </style> 
</head> 
<body> 
    <h1>Your Receipt</h1> 
    <<SNIP>> 

ですが、pdfの空白は表示されません。すべての言葉は互いに隣り合っています。私は通常のスペースと "& nbsp"を試して、結果は同じです。例えば、上記は "YourReceipt"としてpdfに表示されます。

私がpisaのコマンドラインバージョンを使用しようとすると、単語間にスペースを入れてpdfを生成します。

どのような考えですか?

+0

t.render(c).encode( "UTF-8")のHTML出力をファイルに保存し、コマンドラインバージョンにファイルを送ります。それは何を生み出すのですか? – akonsu

+0

htmlファイルは期待どおりのもので、そのファイルをcmd行pisaに渡すと期待される結果が得られます。現時点では、私はこれをdjangoデーモンを使用してテストしていますが、私もApacheでwsgiを使ってテストしました。私はこれに影響を与える可能性のあることは考えられません。 – Mark

+0

pisa.pisaDocument()の結果をファイルに保存して、PDFビューアでそのファイルを開きます。大丈夫ですか? – akonsu

答えて

0

akonsuのおかげで、この問題はDjangoのHttpResponseがどのように(サーバー側かブラウザ側で)扱われているかのようです。

代わりの

return HttpResponse(result.getvalue(), mimetype="application/pdf") 

用途:

resp = HttpResponse(result.getvalue(), mimetype="application/pdf") 
resp['Content-Disposition'] = 'attachment; filename=receipt.pdf' 
return resp 

これは、少なくともスペースなしの結果を生成します。なぜ最初の方法がうまくいかなかったのかまだ分かりません。

+0

あなたはどのような効果を達成しようとしていますか? PDFをインラインで表示するか、またはURLに移動するときにブラウザが「名前を付けて保存」ダイアログを開く必要がありますか?ところで、あなたはコンテンツの長さのヘッダーを設定しましたか?おそらく、これが問題の原因です。 – akonsu

+2

@ Alanystの答えは実際には正しいです。この問題は、Google ChromeのPDFビューアがpdfを正しくレンダリングできないという問題があるため、ファイルのダウンロードを強制すると解決されません。コンテンツの配置を設定し、強制的にダウンロードを強制するだけでは、問題が発生します。 –

+0

@markels私はあなたの解決策を利用した後でもまだ問題があります。 – laycat

4

私はこの同じ問題を抱えており、ブラウザからPDFをダウンロードすることを強制したくありませんでした。これはプラットフォーム固有の問題であることが判明しました。Microsoft TrueTypeフォントがインストールされていない場合、特定のLinuxディストリビューションの特定のドキュメントにGoogle ChromeのネイティブPDFビューアプラグインが表示されません。詳細は、http://www.google.com/support/forum/p/Chrome/thread?tid=7169b114e8ea33c7&hl=enを参照してください。

私は単に(ディストリビューション用に調整し、これはUbuntuの上にあった)bashで以下のコマンドを実行して、これを固定:

$ sudo apt-get install msttcorefonts 

(インストールプロセス中にEULAを受け入れる)

$ fc-cache -fv 

Chromeを再起動した後(重要!)、ネイティブのPDFビューアは、PDFをスペースで正しく表示しました。

関連する問題