2017-10-20 10 views
1

塗りつぶした円の小さな配列を描くことは、PDFサーフェスに約1000以上も表示されますが、同じコンテキストのPNGレンダリングは問題ありません。私は解決策の範囲を試して、簡単にエラーメッセージや他の手がかりを得ることができません - 任意のアイデア、してください?問題は奇妙なMSコード(Visual Studioの)問題であることが判明する(Mac OS X 10.12.6の下で、最新のライブラリがインストールされている)Pycairoは塗りつぶしの100を描画するときにPDFを生成できません

import cairo 

Pi=3.14159265 

# this works, Python 2.7 
surface = cairo.PDFSurface("cairoTest.pdf", 595, 842) 
cntxt = cairo.Context(surface) 
cntxt.set_source_rgb(.3, .1, .6) 
for xstep in range(0,50,1): 
    for ystep in range(0,31,1): 
     cntxt.arc(xstep*10.+30, ystep*10.+30, 3., 0., 2.*Pi) 
     cntxt.fill() 

surface.write_to_png("example.png") # Output to PNG 
surface.finish 

# this produces zero-byte file 
surface = cairo.PDFSurface("cairoTestFkd.pdf", 595, 842) 
cntxt = cairo.Context(surface) 
cntxt.set_source_rgb(.3, .1, .6) 
for xstep in range(0,55,1): 
    for ystep in range(0,35,1): 
     cntxt.arc(xstep*10.+30, ystep*10.+30, 3., 0., 2.*Pi) 
     cntxt.fill() 

surface.write_to_png("exampleFkd.png") # Output to PNG 
surface.finish 
+0

「失敗」とは何ですか?一部のサークルが見えなくなったり、すべてが見えなくなったりしましたか?何か他の問題? – Iron

+0

場合によっては、判読不能なファイルが生成されることがありますが、ほとんどの場合、長さゼロのPDFファイルが生成されます。 – Raras

+1

surface.finishは関数です – lazka

答えて

0

:コマンドラインから実行、上記のコードは良いPDFを生成するが、内部から実行するコードではありません。さらに、最後に処理されるのは最後のファイル/コンテキストだけです(は十分に大きいか、処理に時間がかかります)。最後に余分なコンテキストを追加することでこの問題を解決します。サブプロセスが終了する前にファイルが閉じられているか、バッファが正しくフラッシュされていないかなど、同期に関する問題が発生していると思われます。

context.finish、context.flushは動作に大きな違いはありません。

+0

実際に 'surface.finish'を呼び出そうとしましたか?あなたの例は '()'を持っていないので、関数を実際に呼び出すことはありません。 –

関連する問題