2015-02-04 4 views
1

지금까지는이 코드의 변형을 사용하여 pisa로 작성한 pdf를 인쇄했습니다. pygtk 자주 묻는 질문에서 가져python Gtk.PrintOperation pdf를 인쇄하십시오

:

import gtk 
import gtkunixprint 

def print_cb(printjob, data, errormsg): 
    if errormsg: 
     print('Error occurred while printing:\n%s' % errormsg) 

filename = 'the_pdf_file_to_be_printed.pdf' 
pud = gtkunixprint.PrintUnixDialog() 
response = pud.run() 
if response == gtk.RESPONSE_OK: 
    printer = pud.get_selected_printer() 
    settings = pud.get_settings() 
    setup = pud.get_page_setup() 
    printjob = gtkunixprint.PrintJob('Printing %s' % filename, printer, settings, setup) 
    printjob.set_source_file(filename) 
    printjob.send(print_cb) 
pud.destroy() 

지금 내가 Gtk3의 PyObject에 이식하고 그리고 난 문제를 해결할 수 없습니다. Gtk.PrintOperation 방법이지만 인쇄 작업 whith printJob 관련된 또는 인쇄 할 파일을 전달하는 방법을 찾을 수 없습니다.
감사

답변

2

여기 예입니다, 당신이 그것을 유용

#!/usr/bin/env python 
import os 
import sys 
from gi.repository import GLib, Gtk, Poppler 


class PrintingApp: 
    def __init__(self, file_uri): 
     self.operation = Gtk.PrintOperation() 

     self.operation.connect('begin-print', self.begin_print, None) 
     self.operation.connect('draw-page', self.draw_page, None) 

     self.doc = Poppler.Document.new_from_file(file_uri) 

    def begin_print(self, operation, print_ctx, print_data): 
     operation.set_n_pages(self.doc.get_n_pages()) 

    def draw_page(self, operation, print_ctx, page_num, print_data): 
     cr = print_ctx.get_cairo_context() 
     page = self.doc.get_page(page_num) 
     page.render(cr) 

    def run(self, parent=None): 
     result = self.operation.run(Gtk.PrintOperationAction.PRINT_DIALOG, 
            parent) 

     if result == Gtk.PrintOperationResult.ERROR: 
      message = self.operation.get_error() 

      dialog = Gtk.MessageDialog(parent, 
             0, 
             Gtk.MessageType.ERROR, 
             Gtk.ButtonsType.CLOSE, 
             message) 

      dialog.run() 
      dialog.destroy() 

     Gtk.main_quit() 


def main(): 
    if len(sys.argv) != 2: 
     print "%s FILE" % sys.argv[0] 
     sys.exit(1) 

    file_uri = GLib.filename_to_uri(os.path.abspath(sys.argv[1])) 

    main_window = Gtk.OffscreenWindow() 
    app = PrintingApp(file_uri) 
    GLib.idle_add(app.run, main_window) 
    Gtk.main() 

if __name__ == '__main__': 
    main() 
+0

감사 telemaco을 찾을 수 있기를 바랍니다. IT가 작동합니다. 나는 포플러 단계를 놓치고 있었다. –

관련 문제