Печать с помощью Gtk.Printing / cairo / pango в gtk2hs - Операции печати в Haskell - PullRequest
1 голос
/ 20 ноября 2011

В настоящее время я пытаюсь напечатать файлы или текст (на принтер, а не на терминал и т. Д.) В Haskell с помощью gtk (2 часа), используя Graphics.UI.Gtk.Printing, Cairo и Pango.

Код следующий:

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 (2 часа) в Hackage: http://hackage.haskell.org/package/gtk-0.12.0

1 Ответ

2 голосов
/ 20 ноября 2011

Вы пытались использовать GtkPrintUnixDialog вместо этого?
Намного проще в использовании.В основном вы создаете GtkPrintUnixDialog, создаете GtkPrintJob.Установите для печати исходный файл (текст, pdf, который вы назвали), а затем распечатайте его.Вы также не можете отобразить диалоговое окно, чтобы оно использовало стандартные настройки печати в системе.

...