2017-10-20 22 views
1

약 1,000 개가 넘는 PDF 표면에 나타날 때 사소한 채워진 원을 그리는 데 실패하지만 동일한 컨텍스트의 PNG 렌더링에는 아무런 문제가 없습니다. 나는 다양한 해결책을 시도해 왔으며 오류 메시지 나 다른 단서를 쉽게 얻을 수 없습니다 - 어떤 아이디어입니까? 명령 줄에서 실행이, 위의 코드가 좋은 PDF를 생성하지만, (맥 OS X 10.12.6에서, 최신 라이브러리가 설치)Pycairo가 100 개의 채우기를 그릴 때 Pycairo을 생성하지 못함

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

때로는 읽을 수없는 파일을 생성하지만, 대부분 길이가 0 인 PDF 파일을 생성합니다. – Raras

+1

surface.finish는 함수입니다. – lazka

답변

0

문제는 이상한 MS 코드 (비주얼 스튜디오) 문제 밝혀 내부에서 실행 코드. 또한, 마지막 파일/컨텍스트가 작동하지 않는 경우에만 (이 충분히 크거나 처리하는 데 시간이 오래 걸리는가?) 그래서 끝에 더미/추가 컨텍스트를 추가하면 "정렬"됩니다. 서브 프로세스가 끝나기 전에 닫히는 파일, 버퍼가 제대로 플러시되지 않은 것 등과 같은 동기화 문제가 의심됩니다.

context.finish, context.flush는 동작에 아무런 차이가 없습니다.

+0

실제로'surface.finish'를 호출하려고 했습니까? 당신의 예제는 그 안에'()'가 없으므로 실제로 함수를 호출하지 않습니다. –