python打印操作打印pd

2024-09-28 19:09:43 发布

您现在位置:Python中文网/ 问答频道 /正文

到目前为止,我一直在使用这个代码的变体来打印我用pisa创建的pdf文件。在

摘自pygtk常见问题:

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()

现在我要移植到gtk3pyobject,我不能解决这个问题。 我发现了打印操作是一种方法,但我无法将打印操作与打印作业或如何传递文件进行打印联系起来。
谢谢


Tags: 文件importgtkgetsettingspdfsetupfilename
1条回答
网友
1楼 · 发布于 2024-09-28 19:09:43

这是一个例子,希望你觉得有用

#!/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()

相关问题 更多 >