Pycairo не может создать PDF при рисовании сотен заливок

Не удается нарисовать тривиальный массив закрашенных кругов, когда на поверхности PDF появляется более тысячи, но рендеринг PNG в том же контексте не вызывает проблем. Я испробовал ряд решений и не могу сразу получить сообщение об ошибке или другие подсказки - есть идеи, пожалуйста? (в Mac OS X 10.12.6 установлены последние библиотеки)

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

1 ответ

Проблема оказывается странной проблемой MS Code (Visual Studio): запуск из командной строки, приведенный выше код создает хороший PDF, но запуск изнутри Code это не так. Кроме того, это только последний обработанный файл / контекст, который не работает (и является достаточно большим или занимает достаточно много времени для обработки?), Поэтому добавление фиктивного / дополнительного контекста в конце "сортирует это". Я подозреваю, что возникает проблема синхронизации, например, закрытие файлов до завершения подпроцесса, неправильная очистка буферов и т. Д.

Обратите внимание, что context.finish, context.flush не влияют на поведение.

Другие вопросы по тегам