[cairo] Multiple pages in single PDF ?
Behdad Esfahbod
behdad at behdad.org
Tue Sep 2 14:14:05 PDT 2008
Ian Britten wrote:
> Behdad Esfahbod wrote:
>> rush ta wrote:
>>> >From the documentation i understand that it is poosible to read from
>>> muliple pages and copy them to a surface..
>>> Is it possible to create multiple pages in a single PDF file.
>>> I am trying to print a table into PDF file. The content of which may
>>> be exceed to 2 pages.
>>> Currently i am making another PDF file for storing the exceded data.
>>> But its a lame solution i guess... Any help please... ?
>> cairo_show_page()
>
> [ I'm assuming you meant cairo_surface_show_page() ... ]
Both exist and both work. One on a cairo_t, the other on a cairo_surface_t.
> Interesting - This got me thinking about something similar, since
> this topic came up...
>
> We often produce large sized output (eg: Desk-sized maps). Our
> rendering mechanism simply renders one 'page', and the user prints
> it to their plotter (or printer, etc), which is expected to be big
> enough to handle it.
>
> Can any of this Cairo functionality be used so as to cut up a
> PDF surface after it's been generated? Sortof like some final
> processing stage, after all the rendering has been done to a single
> PDF Surface, but before it's written out to disk? I really don't
> want to have to rework our drawing engine right now to be aware of
> multiple pages, but it'd be nice if a large plot could be cut into
> smaller pages. A common use of this is to send the printout to a
> cheaper/faster printer, for rough QA, etc.
>
> Yes, I'm aware of fact that separate post-processing tools can
> do this sort of work, but they require separate installation and
> use (And training!) by the end-user. I'm just wondering if the
> same functionality can be achieved from within the Cairo API.
You can do this with cairo, but you are quite likely to get a HUGE output
file. Like the entire drawing operations repeated for each page. If still
interested, here is how you do it:
- Create your final PDF surface with the target paper size, call it pdf.
- Create a surface "similar" to your pdf surface, the size of the map. Use
cairo_surface_create_similar(), call it similar.
- Draw the map to the similar surface.
- Then for each desired page in the final pdf:
Use cairo_set_source_surface() with the similar surface. Use the
offset argument to position the map in the page.
If desired, add a clip rectangle to introduce margins.
cairo_paint()
cairo_show_page()
Hope that helps,
behdad
> Thanks for any information!
> Ian
More information about the cairo
mailing list