Python 3.x 将_source_surface从RecordingSurface设置为PDFSurface,并使用原点转换生成PNG但为空的PDF

Python 3.x 将_source_surface从RecordingSurface设置为PDFSurface,并使用原点转换生成PNG但为空的PDF,python-3.x,pdf,cairo,pycairo,python-cffi,Python 3.x,Pdf,Cairo,Pycairo,Python Cffi,在本例中,我在沿X坐标移动的同时,在远离原点的Y坐标中绘制了一些30px的线元素。这是在记录表面上绘制的,因为在我的真实代码中,我在开始之前不知道扩展。绘制完成后,我在PDFSurface上重复绘制,但由于我希望PDF和PNG与绘制的元素齐平,因此我将PDFSurface的边界设置为RecordingSurface墨迹范围的高度和宽度。下一步,因为我画的是30px,上面只有空的空间,所以我把我的画翻译成set_source_surface-30px。现在,当编写PNG时,所有工作都正常,但PDF

在本例中,我在沿X坐标移动的同时,在远离原点的Y坐标中绘制了一些30px的线元素。这是在记录表面上绘制的,因为在我的真实代码中,我在开始之前不知道扩展。绘制完成后,我在PDFSurface上重复绘制,但由于我希望PDF和PNG与绘制的元素齐平,因此我将PDFSurface的边界设置为RecordingSurface墨迹范围的高度和宽度。下一步,因为我画的是30px,上面只有空的空间,所以我把我的画翻译成set_source_surface-30px。现在,当编写PNG时,所有工作都正常,但PDF是空的。如果我手动将高度扩展到100px,PDF将以正确的原点正确绘制。如果我从Y 0px开始画图,而不是Y 30px,它也可以工作。我错过了什么吗?还是一只虫子

谢谢你的帮助。下面是一个测试代码:

import cairocffi as cairo   
rs = cairo.RecordingSurface(cairo.CONTENT_COLOR_ALPHA, None)
ctxRS = cairo.Context(rs)

items = ([0], [28, 29], [39], [42], [64], [67], [70, 71, 72], [76, 77], [79, 80], [86], [90], [104, 105],
         [131], [134, 135, 136, 137, 138, 139], [145, 146, 147], [150, 151], [156], [174], [188], [191],
         [199, 200], [203], [212], [216], [229, 230], [240, 241, 242, 243], [262])

for item in items:
    initialPosition = item[0]
    numberOfItems = len(item)

    offset = initialPosition * 10
    lineLength = 10 * numberOfItems

    ctxRS.set_source_rgba(1.0, 0.0, 0.0, 1.0)
    ctxRS.set_line_width(0)
    ctxRS.move_to(offset, 30)
    ctxRS.line_to(offset, 40)
    ctxRS.line_to(offset + lineLength, 40)
    ctxRS.line_to(offset + lineLength, 30)
    ctxRS.close_path()
    ctxRS.stroke_preserve()
    ctxRS.set_source_rgba(1.0, 0.0, 0.0, 1.0)
    ctxRS.fill()

x, y, width, height = rs.ink_extents()
ps = cairo.PDFSurface("cairoTest.pdf", width, height)
ctxPS = cairo.Context(ps)
ctxPS.set_source_surface(rs, -x, -y)
ctxPS.paint()
ps.write_to_png("cairoTest.png")
ps.finish()

为什么
设置线条宽度(0)
?因为我不希望我正在绘制的形状有边框。我追溯到开罗的一只虫子。从他们的网站上每晚构建一次,效果很好。与python实现无关。