1

我目前正在尝试使用 gtk(2hs) Graphics.UI.Gtk.Printing,Cairo 和 Pango 在 Haskell 中打印文件或文本(到打印机,而不是终端等)。

代码如下:

op <- printOperationNew
on op printOptBeginPrint $ \context ->   do
                                 set op [ printOperationNPages := 1]
                return ()

on op printOptDrawPage $ \context pages -     do
                     let text = "Hello World"
                     putStrLn $ "Printing :" ++ text

                     --cairo
                     cairoContext<- printContextGetCairoContext context

                     --pango
                     layout<- printContextCreatePangoLayout context

                     layoutSetText layout text

                     let _ = do
                     --inside the Render Monad
                                 showLayout layout
                                 return ()
                     return ()

result <- printOperationRun op PrintOperationActionPrintDialog window

这会打印一个空白页面,因为我将 设置printOperationNPages为 1。问题是 cairo 没有绘制任何内容。我想我必须将cairoContext与 pango 布局连接起来,正确的调用 showLayout实际上是pango_cairo_show_layout (cr, layout);.

我已经在 gtk2hs [1] 的邮件列表中讨论了这个问题。

所以如果有人有这方面的经验,请告诉我。我也将感谢其他更好的平台独立解决方案,用于在 haskell 中打印文件/文本。

对话链接:[1] http://sourceforge.net/mailarchive/message.php?msg_id=27662267

Hackage 中的 GTK(2hs):http: //hackage.haskell.org/package/gtk-0.12.0

4

1 回答 1

2

你试过GtkPrintUnixDialog改用吗?
使用起来简单多了。基本上你创建GtkPrintUnixDialog,创建一个GtkPrintJob。将打印设置为源文件(文本,您命名的pdf),然后将其打印出来。您也可以不显示该对话框,以便它使用系统上的默认打印设置。

于 2011-11-20T19:48:08.300 回答