Конвертируйте SVG в PDF используя Python, rsvg & Cairo

Мне удалось прочитать SVG с помощью rsvg и вывести его в PNG через Cairo в Python.

Несмотря на множество подобных вопросов, я не видел документации о том, как конвертировать SVG в PDF через rsvg & cairo. Я знаю об инструментах командной строки 'rsvg'/'rsvp-convert', но хочу вместо этого включить функциональность в мой код Python. Запускаемого подпроцесса тоже нет.

Для примера, вот в основном то, что я сейчас использую для рендеринга PNG:

   img =  cairo.ImageSurface(cairo.FORMAT_ARGB32, w, h)
   ctx = cairo.Context(img)
   handler= rsvg.Handle(None, svgstr)
   handler.render_cairo(ctx)
   img.write_to_png(pngfilepath)

Вопрос заключается в следующем: как изменить код для вывода PDF, чтобы сохранить векторный формат; Растеризация не должна произойти.

1 ответ

Замените ваш звонок на cairo.ImageSurface(cairo.FORMAT_ARGB32, w, h) с cairo.PDFSurface(filename, width_in_points, height_in_points), Я не знаю, каково стандартное масштабирование поверхности PDF, но, надеюсь, вы сможете продолжать использовать те же значения ширины и высоты, что и раньше.

Поскольку вы прямо упоминаете, что теперь должна произойти растеризация: Cairo "делает все возможное", чтобы не растровые вещи, но есть комбинации, где Cairo должен вернуться к растеризованным изображениям. Вы можете контролировать разрешение этих изображений через set_fallback_resolution метод.

Причины растеризации включают в себя комбинации операций, которые не могут быть выражены в PDF (извините, я не знаю подробностей) и если какое-то растеризованное изображение рисуется на поверхности PDF.

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