RE: Printing/Creating PDf/Postscript


The issue is that Cairo::PdfSurface and Cairo::PsSurface default to using points as the unit, while Gtk2::PrintOperation defaults to using pixels as the unit.


The solution is simply  to say






From: Jeff Hallock
Sent: Thursday, June 03, 2010 11:22 AM
To: gtk-perl-list gnome org
Subject: Printing/Creating PDf/Postscript


I am attempting to create reports using Gtk2/Cairo/Pango.  My reports should be able to write to a print operation, or

a cairo surface. This seems simple enough – just pass  in the Cairo context you want to write to.  The problem I am running into is when draw text on a context from a  print operation – the text appears extremely tiny on the page (look at print_op.pdf).


When drawing to a Cairo Surface – the output is as expected (see surface.pdf/ is the script that created these files so you can run it yourself.


What is going on here?


How can write this code, so the print_text function prints the same size on the print operation and a cairo surface that I create myself.



Thanks in advance for any input!


-          Jeffrey Ray




# prints to print driver - text is tiny

my $window = Gtk2::Window->new;

my $po = Gtk2::PrintOperation->new;

$po->set_n_pages( 1 );


$po->signal_connect('draw-page' => sub {

    my ($po, $print_context, $number) = @_;

    my $cr = $print_context->get_cairo_context;



$po->run('print-dialog', $window);




# creates a pdf file, text is large

my $surface = Cairo::PdfSurface->create ( 'surface.pdf', 612, 792);

my $cr = Cairo::Context->create( $surface );





# creates a ps file, text is large

$surface = Cairo::PdfSurface->create ( '', 612, 792);

$cr = Cairo::Context->create( $surface );







sub print_text {

    my $cr = shift;


    my $layout = Pango::Cairo::create_layout( $cr );

    $layout->set_markup( 'Foo:Bar' );


    my $attrlist = Pango::AttrList->new;

    my $font = Pango::AttrFontDesc->new( Pango::FontDescription->from_string('calibri,arial 10') );


    $layout->set_attributes( $attrlist );


    Pango::Cairo::update_layout( $cr, $layout );   

    Pango::Cairo::show_layout( $cr, $layout );



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]