2011-11-20 28 views
1

我正在嘗試使用Graphics.UI.Gtk.Printing在Haskell中使用gtk(2hs)打印文件或文本(打印機,而不是終端等) ,開羅和Pango。在gtk2hs中使用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 的問題是,開羅不畫任何東西這將打印空白頁。我想我必須 連接cairoContext與潘戈佈局,適當的電話 showLayout實際上是pango_cairo_show_layout (cr, layout);

我已經在gtk2hs的郵件列表上討論過這個問題[1]。

所以如果有人有這方面的經驗,請讓我知道。我也非常感謝在Haskell中打印文件/文本的其他更好的與平臺無關的解決方案。

鏈接到對話: [1] http://sourceforge.net/mailarchive/message.php?msg_id=27662267

GTK(2HS)在Hackage: http://hackage.haskell.org/package/gtk-0.12.0

+0

gtk-cairo:http://projects.haskell.org/gtk2hs/docs/gtk-docs-0.11.0/Graphics-UI-Gtk-Cairo.html – forste

+0

gtk更高級別的打印api:http:// developer.gnome.org/gtk/2.24/gtk-High-level-Printing-API.html – forste

回答

2

您是否嘗試過使用GtkPrintUnixDialog呢?
更簡單的使用。基本上你創建GtkPrintUnixDialog,創建一個GtkPrintJob。將打印設置爲源文件(文本,您將其命名爲pdf),然後將其打印出來。您也可以不顯示對話框,以便它使用系統上的默認打印設置。

+0

我在這裏閱讀了http://developer.gnome.org/gtk/2.24/GtkPrintUnixDialog.html,但我還沒有找到haskell/gtk2hs相當於它。你知道它在哪裏,因爲它不在Gtk2Hs套件的核心庫中! – forste