0

我已经设法使用 rsvg 读取 SVG,并在 Python 中通过 Cairo 将其输出到 PNG。

尽管有很多类似的问题,但我还没有看到任何关于如何通过 rsvg 和 cairo 将 SVG 转换为 PDF 的文档。我知道命令行 '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,从而保持矢量格式;不得发生光栅化。

4

1 回答 1

0

将您的呼叫替换cairo.ImageSurface(cairo.FORMAT_ARGB32, w, h)cairo.PDFSurface(filename, width_in_points, height_in_points)。我不知道 PDF 表面的默认缩放比例是多少,但希望您可以继续使用与以前相同的宽度和高度值。

由于您明确提到现在必须进行光栅化:开罗“尽最大努力”不光栅化事物,但在某些组合中,开罗必须退回到光栅化图像。set_fallback_resolution您可以通过该方法控制此图像的分辨率。

光栅化的原因包括无法在 PDF 中表达的操作组合(抱歉,我不知道细节)以及是否将某些光栅化图像绘制到 PDF 表面。

于 2014-12-04T10:41:21.887 回答