[cairo] writing multiple surfaces to a single (pdf) file

Andrea Canciani ranma42 at gmail.com
Mon Nov 7 00:29:06 PST 2011

2011/11/7 Zoltán Vörös <zvoros at gmail.com>:
> Many thanks for the fast feedback!
>> cannot find any short sample that uses them... I hope the documentation is
>> sufficient (The simplest reference I can provide is:
>> http://cgit.freedesktop.org/cairo/tree/test/multi-page.c#n106 )
> Well, this is/was actually the problem: I did read the docs, but it is
> completely unclear to me what one is supposed to do. At the moment, I have
> this

The issue in your code is that you're doing all the drawing before
calling the *_page() methods.
In addition to this, I believe that calling show_page() should be
sufficient for your use case.
Can you please your code with the following changes?

           surface = cairo.PDFSurface('pdffile.pdf', 504, 648);
           cr = cairo.Context(surface)
           cr.set_source_surface(self.surface, 0, 0)
           cr.show_page() # show the first page

           self.page += 1
           self.path = self.pages[self.page]                     # we
show another page
           self.draw_note(self.widget('draw'), self.path)   # This
redraws the surface on gtk drawable, which is self.surface
           cr.set_source_surface(self.surface, 0, 0)
           cr.paint() # don't forget to paint(), setting a source does
not change the surface content
           cr.show_page() # show the second page


> and it does print two pages to the pdf file, but the two pages are the same.
> I can't get the second page to the file, though it is painted properly on
> the self.surface, so I can it in the gui.
> Well, any hints would be appreciated.
> Cheers,
> Zoltán

More information about the cairo mailing list