打印操作

主要对象是分配给每个打印操作的Gtk::PrintOperation。要处理绘制页请连接到它的信号,或从其继承并覆盖默认的虚信号处理函数。PrintOperation将自动处理所有影响打印循环的设置。

19.1.1. 信号

PrintOperation::run()方法启动打印循环,在此期间会发出以下信号:

  • begin_print:你必须处理该信号,因为这是你使用提供的Gtk::PrintContext创建和设置Pango::Layout的地方,以及对你的打印输出进行分页的地方。
  • paginate:分页可能很慢,所以如果需要监视它,你可以调用PrintOperation::set_show_progress()方法并处理此信号。
  • 对于每个要渲染的页面,都会发出以下信号:
    • request_page_setup:提供一个PrintContext、页码和Gtk::PageSetup。如果你需要逐页的修改页面设置,请处理此信号。
    • draw_page:你必须处理此信号,该信号提供一个PrintContext和页码。你应该使用PrintContext创建一个Cairo::Context,并将提供的页面绘制到其中。要渲染文本,请遍历你在begin_print处理程序中创建的Pango::Layout
  • end_print:它的处理程序是用于释放与PrintOperation相关的所有资源的安全场所。如果你通过继承PrintOperation创建了自定义类,则直接在自定义类的析构函数中进行此操作会更简单。
  • done:该信号于打印完成时(当打印数据假脱机)被发出。请注意,所提供的Gtk::PrintOperationResult可能表明发生了错误。无论如何你都应该让用户知道最终的状态。
  • status_changed: 直到打印作业完成,只要打印作业状态发生了更改就会发出此信号。假脱机后可以调用PrintOperation::set_track_print_status()监视作业状态。要查看状态请调用get_status()get_status_string()

参考