Где-то в 2011 году я написал скрипт Pycairo для создания PDF-файла, который включал несколько заливок пользовательских векторных шаблонов.Сегодня я перезапустил его (Python 3.5.2, Pycairo 1.10.0) и был удивлен, увидев, что все эти шаблоны были отображены как растровые растровые изображения низкого разрешения.Я сократил свой сценарий до этого минимального примера:
#!/usr/bin/python3
import cairo
def main():
surface = cairo.PDFSurface("test.pdf", 100, 100)
ctx = cairo.Context(surface)
pattern = make_pattern()
ctx.rectangle(10, 10, 80, 80)
ctx.set_source(pattern)
ctx.fill()
surface.finish()
def make_pattern():
pattern_surface = cairo.PDFSurface(None, 32, 8)
ctx = cairo.Context(pattern_surface)
ctx.set_line_width(.5)
ctx.set_source_rgb(0,0,0)
ctx.move_to(5, 6)
ctx.line_to(27, 2)
ctx.stroke()
pattern = cairo.SurfacePattern(pattern_surface)
pattern.set_extend(cairo.EXTEND_REPEAT)
return pattern
if __name__ == "__main__":
main()
Полученный PDF-файл с сильным масштабированием отображает шаблон следующим образом:
Просмотр текста в файле PDF подтверждает, что это растровое изображение.Использование SVGSurface дает аналогичные результаты.Есть ли способ вернуться к старому поведению, при котором заливки шаблонов PDF отображались как векторные заливки в итоговом PDF, а не растеризовались, как это?Единственная ссылка, которую я нашел в Интернете на эту проблему, это этот вопрос без ответа в списке рассылки cairo с января 2012 года.