1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
|
#! /usr/bin/env python
#/*
# * example_02.c: sample gnome-print code
# *
# * This program is free software; you can redistribute it and/or
# * modify it under the terms of the GNU Library General Public License
# * as published by the Free Software Foundation; either version 2 of
# * the License, or (at your option) any later version.
# *
# * This program is distributed in the hope that it will be useful,
# * but WITHOUT ANY WARRANTY; without even the implied warranty of
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# * GNU Library General Public License for more details.
# *
# * You should have received a copy of the GNU Library General Public
# * License along with this program; if not, write to the Free Software
# * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
# *
# * Authors:
# * Chema Celorio <chema@ximian.com>
# Python conversion:
# Gustavo J. A. M. Carneiro <gustavo@users.sf.net>
# *
# * Copyright (C) 2002 Ximian Inc. and authors
# *
# */
#/*
# * See README
# */
import pygtk; pygtk.require("2.0")
import gnomeprint
import gtk.gdk
import struct
NUMBER_OF_PIXELS=256
def my_print_image_from_pixbuf(gpc, pixbuf):
raw_image = pixbuf.get_pixels()
has_alpha = pixbuf.get_has_alpha()
rowstride = pixbuf.get_rowstride()
height = pixbuf.get_height()
width = pixbuf.get_width()
if has_alpha:
gpc.rgbaimage(raw_image, width, height, rowstride)
else:
gpc.rgbimage(raw_image, width, height, rowstride)
def my_print_image_from_disk(gpc):
# Load the image into a pixbuf
pixbuf = gtk.gdk.pixbuf_new_from_file("sample-image.png")
# Save the graphic context, scale, print the image and restore
gpc.gsave()
gpc.scale(144, 144)
my_print_image_from_pixbuf(gpc, pixbuf)
gpc.grestore()
def my_print_image_from_memory(gpc):
pixels = NUMBER_OF_PIXELS;
# Create the image in memory
color_image = []
for y in xrange(pixels):
for x in xrange(pixels):
color_image.append(struct.pack("BBB",
(x + y) >> 1,
(x + (pixels - 1 - y)) >> 1,
((pixels - 1 - x) + y) >> 1))
# All images in postscript are printed on a 1 x 1 square, since we
# want an image which has a size of 2" by 2" inches, we have to scale
# the CTM (Current Transformation Matrix). Save the graphic state and
# restore it after we are done so that our scaling does not affect the
# drawing calls that follow.
gpc.gsave()
gpc.scale(144, 144)
gpc.rgbimage("".join(color_image), pixels, pixels, pixels * 3)
gpc.grestore()
def my_draw(gpc):
gpc.beginpage("1")
gpc.translate(200, 100)
my_print_image_from_memory(gpc)
gpc.translate(0, 150)
my_print_image_from_disk(gpc)
gpc.showpage()
def my_print():
job = gnomeprint.Job(gnomeprint.config_default())
gpc = job.get_context()
my_draw(gpc)
job.close()
job.print_()
my_print()
print "Done..."
|