buffer drucken/pdf, geht das ?



  • Hi !

    Ich habe mehrfach gelesen, das man mit Gtk und auch mit Gimp
    Pdf-Dateien erstellen und drucken kann...

    Jezt frage ich mich Natürlich... kann man einen buffer z.B von einem Textview irgendwie drucken ? Oder, kann man vlt direkt ne pdf Datei erzeugen ?
    Kann mir irgendjemand sagen wo ich Informationen dazu bekomme ? Über das Pdf Format direkt hab ich leider keine infos bekommen und im reference manual von Gtk wüsste ich nicht wo ich gucken soll..

    Freue mich über jedliche Antwort !
    Mfg McMorf



  • kann man einen buffer z.B von einem Textview irgendwie drucken ? im reference manual von Gtk wüsste ich nicht wo ich gucken soll..

    Eventuell bei Drucken, auf Englisch Printing? http://library.gnome.org/devel/gtk/unstable/Printing.html

    Ich hab dir mal aus der Dokumentation ein kleines Beispielprogramm zusammengepastet:

    #include <gtk/gtk.h>
    
    static void
    draw_page (GtkPrintOperation *operation,
               GtkPrintContext   *context,
               int                page_nr)
    {
      cairo_t *cr;
      PangoLayout *layout;
      PangoFontDescription *desc;
    
      cr = gtk_print_context_get_cairo_context (context);
      layout = gtk_print_context_create_pango_layout (context);
      pango_layout_set_text (layout, "brinnding", -1);
      desc = pango_font_description_from_string ("sans 28");
      pango_layout_set_font_description (layout, desc);
      pango_font_description_free (desc);
      cairo_move_to (cr, 30, 20);
      pango_cairo_layout_path (cr, layout);
      cairo_set_source_rgb (cr, 0, 0.0, 1.0);
      cairo_fill (cr);
      g_object_unref (layout);
    }
    
    static void
    begin_print (GtkPrintOperation *operation,
                 GtkPrintContext   *context,
                 gpointer           user_data)
    {
      gtk_print_operation_set_n_pages (operation, 1);
    }
    
    static GtkPrintSettings *settings = NULL;
    
    static void
    do_print (GtkWindow *main_window)
    {
      GtkPrintOperation *print;
      GtkPrintOperationResult res;
      print = gtk_print_operation_new ();
      if (settings != NULL)
        gtk_print_operation_set_print_settings (print, settings);
      g_signal_connect (print, "begin-print", G_CALLBACK (begin_print), NULL);
      g_signal_connect (print, "draw-page", G_CALLBACK (draw_page), NULL);
      res = gtk_print_operation_run (print, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,
                                     GTK_WINDOW (main_window), NULL);
      if (res == GTK_PRINT_OPERATION_RESULT_APPLY)
        {
          if (settings != NULL)
            g_object_unref (settings);
          settings = g_object_ref (gtk_print_operation_get_print_settings (print));
        }
      g_object_unref (print);
    }
    
    int main(int argc, char *argv[])
    {
      GtkWidget *window;
      GtkWidget *button;
    
      gtk_init(&argc, &argv);
      window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
      gtk_window_set_title (GTK_WINDOW (window), "druckme");
      g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
      button = gtk_button_new_with_label ("print");
      g_signal_connect_swapped (button, "clicked", G_CALLBACK (do_print), window);
      gtk_container_add (GTK_CONTAINER (window), button);
      gtk_widget_show_all (window);
      gtk_main ();
    
      return 0;
    }
    

    Du siehst, im Printing Dialog kannst du auswählen, welchen Dateityp du willst. Das entsprechende interne Format generiert dir GTK+ schon selber, wenn du mit den Standardwerkzeugen arbeitest.

    Mfg O'Brinnding



  • Hi !

    Mittlerweile hab ichs im Reference Manual auch gefunden, aber leider nicht ganz verstanden.

    Dein Beispiel wird mir sicherlich weiter helfen...

    Super Herzlichen Dank, O'Brinnding !!!

    Mfg McMorf



  • Hi !

    das mit dem Drucken klappt schon mal wunderbar....

    aber:

    Du siehst, im Printing Dialog kannst du auswählen, welchen Dateityp du willst. Das entsprechende interne Format generiert dir GTK+ schon selber, wenn du mit den Standardwerkzeugen arbeitest.

    wo kann ich das auswählen ?
    ich habe nur die Möglichkeit z.B den Druckauftrag direkt in eine Datei umzuleiten...
    wenn ich da *.pdf eingebe bekomme ich eine leere Datei.
    benutze ich z.B freePDF funktioniert alles wunderbar...
    aber genau das will ich ja vermeiden.

    Mfg McMorf


Anmelden zum Antworten