예제 #1
0
파일: Printing.py 프로젝트: tomihasa/pygui
def set_gtk_state(gtk_page_setup, state):
    gtk_page_setup.set_orientation(state['orientation'])
    gtk_page_setup.set_paper_size(gtk.PaperSize(state['paper_size']))
    gtk_page_setup.set_top_margin(state['top_margin'], UNIT_POINTS)
    gtk_page_setup.set_bottom_margin(state['bottom_margin'], UNIT_POINTS)
    gtk_page_setup.set_left_margin(state['left_margin'], UNIT_POINTS)
    gtk_page_setup.set_right_margin(state['right_margin'], UNIT_POINTS)
예제 #2
0
class HtmlPrinter(object):
    """
    Idea and code-snippets taken from interwibble,
    "A non-interactive tool for converting any given website to PDF"
    (http://github.com/eeejay/interwibble/)
    """
    PAPER_SIZES = {
        'a3': gtk.PAPER_NAME_A3,
        'a4': gtk.PAPER_NAME_A4,
        'a5': gtk.PAPER_NAME_A5,
        'b5': gtk.PAPER_NAME_B5,
        'executive': gtk.PAPER_NAME_EXECUTIVE,
        'legal': gtk.PAPER_NAME_LEGAL,
        'letter': gtk.PAPER_NAME_LETTER
    }

    def __init__(self, paper='a4'):
        self._webview = Browser()
        try:
            self._webview.connect('load-error', self._load_error_cb)
            self._webview.connect('title-changed', self._title_changed_cb)
            self._webview.connect('load-finished', self._load_finished_cb)
        except TypeError, err:
            logging.info(err)
        self._paper_size = gtk.PaperSize(self.PAPER_SIZES[paper])
        self.outfile = None
예제 #3
0
class HtmlPrinter(object):
    '''
    Idea and some code taken from interwibble,
    "A non-interactive tool for converting any given website to PDF"

    (http://github.com/eeejay/interwibble/)
    '''
    PAPER_SIZES = {
        'a3': gtk.PAPER_NAME_A3,
        'a4': gtk.PAPER_NAME_A4,
        'a5': gtk.PAPER_NAME_A5,
        'b5': gtk.PAPER_NAME_B5,
        'executive': gtk.PAPER_NAME_EXECUTIVE,
        'legal': gtk.PAPER_NAME_LEGAL,
        'letter': gtk.PAPER_NAME_LETTER
    }

    def __init__(self, paper='a4'):
        self._webview = webkit.WebView()
        webkit_settings = self._webview.get_settings()
        webkit_settings.set_property('enable-plugins', False)
        try:
            self._webview.connect('load-error', self._load_error_cb)
        except TypeError, err:
            logging.info(err)
        self._paper_size = gtk.PaperSize(self.PAPER_SIZES[paper])
예제 #4
0
    def __init__(self,
                 content="",
                 font_name="monospace",
                 font_size=10,
                 wrap=False,
                 set_statusbar_msg=None):
        self.content = "\n" * 11 + content  # Dirty offset for the logo
        self.layout = None
        self.font_name = font_name
        self.font_size = font_size
        self.wrap = wrap
        self._linesppage = 0
        self._current_line = 0

        self.operation = gtk.PrintOperation()
        self.operation.set_unit(gtk.UNIT_MM)

        # Setting paper size as A4
        paper_size = gtk.PaperSize(gtk.PAPER_NAME_A4)
        setup = gtk.PageSetup()
        setup.set_paper_size(paper_size)
        self.operation.set_default_page_setup(setup)

        self.operation.connect("begin_print", self.begin_print)
        self.operation.connect("draw_page", self.draw_page)
        if set_statusbar_msg is not None:
            self.operation.connect("status-changed", status_cb,
                                   set_statusbar_msg)
예제 #5
0
 def __init__(self, unit=gtk.UNIT_MM, size=gtk.PAPER_NAME_A4,
         orientation=gtk.PAGE_ORIENTATION_PORTRAIT):
     """
     Parameters
     ----------
     unit : gtk unit constant
     size : gtk paper name constant
     orientation : gtk page orientation constant
     
     see http://www.pygtk.org/pygtk2reference/gtk-constants.html
     for available constantes
     """
     self.op = None
     self.page_setup = gtk.PageSetup()
     self.page_setup.set_orientation(orientation)
     self.page_setup.set_paper_size(gtk.PaperSize(size))
     self.unit = unit
     self.w = self.page_setup.get_paper_size().get_width(unit)
     self.h = self.page_setup.get_paper_size().get_height(unit)
     
     # Workaround:
     # Variable `self.error` keeps track of exceptions raised during print
     # operation in the methods `PDF._paginate()` or `PDF._draw_page()`. To
     # catch the exceptions, the calls of these methods are encapsulated
     # within `PDF.__paginate()` or `PDF.__draw_page()`, where this variable
     # is set to the exception and the print operation is canceled via
     # `op.cancel()`.
     # The reason for this is that exceptions thrown during the run of the
     # print operation are caught internally and can not be handled further.
     # This leads to fatal uncaught exception error.
     self.error = None
예제 #6
0
 def on_print_clicked(self, widget):
     printop = gtk.PrintOperation()
     page_setup = gtk.PageSetup()
     page_setup.set_paper_size(gtk.PaperSize(gtk.PAPER_NAME_A4))
     printop.set_default_page_setup(page_setup)
     order_products = OrderProduct.find_all_not_yet_ordered_on(
         self.calendardate())
     self.printer = OrderProductPrinter(order_products)
     n_pages = self.printer.calc_n_pages()
     printop.set_n_pages(n_pages)
     printop.connect("draw_page", self.print_ordered_products)
     printop.run(gtk.PRINT_OPERATION_ACTION_PRINT_DIALOG)
예제 #7
0
    def do_print(self):
        print_op = gtk.PrintOperation()

        # Page size and orientation
        # FIXME: sizes other than letter do not work
        print "paper size:", self.papersize
        paper_size = gtk.PaperSize(gtk.PAPER_NAME_LETTER)
        if self.papersize[0] > self.papersize[1]:
            print " landscape"
            paper_size.set_size(self.papersize[1], self.papersize[0],
                                gtk.UNIT_POINTS)
            orientation = gtk.PAGE_ORIENTATION_LANDSCAPE
        else:
            print " portrait"
            paper_size.set_size(self.papersize[0], self.papersize[1],
                                gtk.UNIT_POINTS)
            orientation = gtk.PAGE_ORIENTATION_PORTRAIT
        print "is_custom:", paper_size.is_custom()

        page_setup = gtk.PageSetup()
        page_setup.set_paper_size_and_default_margins(paper_size)
        page_setup.set_orientation(orientation)
        print_op.set_default_page_setup(page_setup)

        #if self.print_settings is not None:
        #	print_op.set_print_settings(self.print_settings)

        print_op.set_show_progress(False)  # appears late
        print_op.set_use_full_page(True)
        print_op.set_embed_page_setup(True)
        print_op.connect('draw_page', self.draw_page)

        print_op.set_n_pages(1)
        result = print_op.run(gtk.PRINT_OPERATION_ACTION_PRINT_DIALOG,
                              self.main_window)

        print "Printing result:", result
        if self.map_failure:
            return self.map_failure
        elif result == gtk.PRINT_OPERATION_RESULT_ERROR:
            return print_op.get_error()
        #elif result == gtk.PRINT_OPERATION_RESULT_APPLY:
        #	self.print_settings = print_op.get_print_settings()
        #	return None
        else:
            return None
예제 #8
0
 def set_document(self, filename, operation, context):
     if not filename.startswith('file'):
         filename = 'file://' + os.path.realpath(filename)
     self.d = poppler.document_new_from_file(filename, None)
     operation.set_n_pages(self.d.get_n_pages())
     # Assume all pages are same
     page = self.d.get_page(0)
     w, h = page.get_size()
     if w > h:
         w, h = h, w
         ori = gtk.PAGE_ORIENTATION_LANDSCAPE
     else:
         ori = gtk.PAGE_ORIENTATION_PORTRAIT
     page_setup = gtk.PageSetup()
     page_setup.set_orientation(ori)
     size = int(round(w)), int(round(h))
     gtk_size = rl2gtk_papersizes.get(size, None)
     if gtk_size:
         ps = gtk.PaperSize(gtk_size)
     else:
         ps = gtk.paper_size_new_custom('', '', w, h, gtk.UNIT_POINTS)
     page_setup.set_paper_size(ps)
     operation.set_default_page_setup(page_setup)
예제 #9
0
def paperstyle_to_pagesetup(paper_style):
    """Convert a PaperStyle instance into a gtk.PageSetup instance.
    
    @param paper_style: Gramps paper style object to convert
    @param type: PaperStyle
    @return: page_setup
    @rtype: gtk.PageSetup
    """
    # paper size names according to 'PWG Candidate Standard 5101.1-2002'
    # ftp://ftp.pwg.org/pub/pwg/candidates/cs-pwgmsn10-20020226-5101.1.pdf
    gramps_to_gtk = {
        "Letter": "na_letter",
        "Legal": "na_legal",
        "A0": "iso_a0",
        "A1": "iso_a1",
        "A2": "iso_a2",
        "A3": "iso_a3",
        "A4": "iso_a4",
        "A5": "iso_a5",
        "B0": "iso_b0",
        "B1": "iso_b1",
        "B2": "iso_b2",
        "B3": "iso_b3",
        "B4": "iso_b4",
        "B5": "iso_b5",
        "B6": "iso_b6",
        "B": "na_ledger",
        "C": "na_c",
        "D": "na_d",
        "E": "na_e",
    }

    # First set the paper size
    gramps_paper_size = paper_style.get_size()
    gramps_paper_name = gramps_paper_size.get_name()

    # All sizes not included in the translation table (even if a standard size)
    # are handled as custom format, because we are not intelligent enough.
    if gramps_paper_name in gramps_to_gtk:
        paper_size = gtk.PaperSize(gramps_to_gtk[gramps_paper_name])
        log.debug("Selected paper size: %s" % gramps_to_gtk[gramps_paper_name])
    else:
        if paper_style.get_orientation() == PAPER_PORTRAIT:
            paper_width = gramps_paper_size.get_width() * 10
            paper_height = gramps_paper_size.get_height() * 10
        else:
            paper_width = gramps_paper_size.get_height() * 10
            paper_height = gramps_paper_size.get_width() * 10
        paper_size = gtk.paper_size_new_custom("custom", "Custom Size",
                                               paper_width, paper_height,
                                               gtk.UNIT_MM)
        log.debug("Selected paper size: (%f,%f)" % (paper_width, paper_height))

    page_setup = gtk.PageSetup()
    page_setup.set_paper_size(paper_size)

    # Set paper orientation
    if paper_style.get_orientation() == PAPER_PORTRAIT:
        page_setup.set_orientation(gtk.PAGE_ORIENTATION_PORTRAIT)
    else:
        page_setup.set_orientation(gtk.PAGE_ORIENTATION_LANDSCAPE)

    # Set paper margins
    page_setup.set_top_margin(paper_style.get_top_margin() * 10, gtk.UNIT_MM)
    page_setup.set_bottom_margin(paper_style.get_bottom_margin() * 10,
                                 gtk.UNIT_MM)
    page_setup.set_left_margin(paper_style.get_left_margin() * 10, gtk.UNIT_MM)
    page_setup.set_right_margin(paper_style.get_right_margin() * 10,
                                gtk.UNIT_MM)

    return page_setup
예제 #10
0
파일: Printing.py 프로젝트: tomihasa/pygui
 def set_paper_name(self, x):
     psize = gtk.PaperSize(gtk_paper_formats.get(x) or x)
     self._gtk_page_setup.set_paper_size(psize)
예제 #11
0
파일: Printing.py 프로젝트: tomihasa/pygui
def gtk_default_page_setup():
    pset = gtk.PageSetup()
    pset.set_paper_size(gtk.PaperSize())
    return pset
예제 #12
0
파일: Printing.py 프로젝트: tomihasa/pygui
def init_gtk_paper_formats():
    for gtk_name in gtk_paper_names:
        display_name = gtk.PaperSize(gtk_name).get_display_name()
        gtk_paper_formats[display_name] = gtk_name
예제 #13
0
def request_page_setup(operation, context, page_nr, page_setup):
  ## Make the second page landscape mode a5
  if page_nr == 1:
      page_setup.set_orientation(gtk.PAGE_ORIENTATION_LANDSCAPE)
      page_setup.set_paper_size(gtk.PaperSize("iso_a5"))