Créer un pdf avec gtk et latex

Contenu du snippet

En GTK+ pur, il n'y a pas de widgets capable de gérer directement la création ou l'affichage de fichiers pdf.
Donc, pour palier à ce manque, on va passer par l'utilisation de latex, et son équivalent pdflatex, pour générer de beaux rapports !!

Voici un code qui fonctionne parfaitement sous Fedora Core 3 (encodage utf8)...
A vous de vous en inspirer...

Source / Exemple :


#include <gtk/gtk.h>
#include <stdlib.h>
#include <stdio.h>

// gcc pdf_maker_v3.c -o pdf_maker.exe `pkg-config --cflags --libs gtk+-2.0`

static GtkWidget *fenetre;
static GtkWidget *vbox;
static GtkWidget *label1;
static GtkWidget *entrynom;
static GtkWidget *label2;
static GtkObject *spinbutton_adj;
static GtkWidget *spinbutton;
static GtkWidget *bout_creer;

void creer_un_pdf(void);

int main(int argc, char **argv)
{  
  gtk_init(&argc, &argv);

  fenetre = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_widget_set_size_request (fenetre, 420, 240);
  gtk_window_set_title (GTK_WINDOW (fenetre), "PDF-Maker");
  g_signal_connect(G_OBJECT(fenetre),"destroy",G_CALLBACK(gtk_main_quit), NULL);

  vbox = gtk_vbox_new (FALSE, 0);
  gtk_container_add (GTK_CONTAINER (fenetre), vbox);
  gtk_container_set_border_width (GTK_CONTAINER (vbox), 15);

  label1 = gtk_label_new ("Tapez votre nom");
  gtk_box_pack_start (GTK_BOX (vbox), label1, FALSE, FALSE, 0);

  entrynom = gtk_entry_new ();
  gtk_box_pack_start (GTK_BOX (vbox), entrynom, TRUE, TRUE, 0);

  label2 = gtk_label_new ("Entrez votre âge :");
  gtk_box_pack_start (GTK_BOX (vbox), label2, FALSE, FALSE, 0);

  spinbutton_adj = gtk_adjustment_new (1, 0, 100, 1, 10, 10);
  spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (spinbutton_adj), 1, 0);
  gtk_box_pack_start (GTK_BOX (vbox), spinbutton, TRUE, TRUE, 0);

  bout_creer = gtk_button_new_with_label("Créer le PDF");
  gtk_box_pack_start (GTK_BOX (vbox), bout_creer, FALSE, FALSE, 0);
  gtk_container_set_border_width (GTK_CONTAINER (bout_creer), 11);

  g_signal_connect(G_OBJECT(bout_creer),"clicked",G_CALLBACK(creer_un_pdf), NULL);

  gtk_widget_show_all(fenetre);
  gtk_main();

  return EXIT_SUCCESS;
}
//------------------------------------------------------------
void creer_un_pdf(void)
{
FILE *futur_pdf;

const gchar* nom;
gdouble age;

nom = gtk_entry_get_text(GTK_ENTRY(entrynom));
age = gtk_spin_button_get_value(GTK_SPIN_BUTTON(spinbutton));

futur_pdf = fopen("./pdf_maker.tex","w");

fprintf( futur_pdf, "\\documentclass{article}\n");
fprintf( futur_pdf, "\\begin{document}\n");
fprintf( futur_pdf, "Nom : %s \\\\ \n",nom);
fprintf( futur_pdf, "Age : %.0f \n",age);
fprintf( futur_pdf, "\\end{document}\n");

fclose(futur_pdf);

// lance la compilation du fichier *.tex créé plus haut
system("pdflatex ./pdf_maker.tex");

// lance kpdf une fois que le fichier pdf a été créé
system("kpdf ./pdf_maker.pdf");

// Si on lance le programme gtk depuis la console, le chemin où se trouvera
   // le pdf sera l'endroit où l'on est
// Si on lance le programme depuis l'environnement graphique KDE, le pdf
   // se trouvera dans le folder par défaut, càd /home/utilisteur
}
//------------------------------------------------------------

Conclusion :


Voilà, en espérant que cela vous aide...

http://www.langagec.be/

http://forums.apinc.org/index.php

Ciao

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.