// on sépare en deux processus le programme :
if (fork() == 0)
{
gtk_main_quit();
// 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
exit(0);
}
else {
// le processus père continue...
}
}
//------------------------------------------------------------
7 juil. 2005 à 15:52
Le fils s'occupe de la gestion des pdf, et le père reprends le contrôle de lui-même :
==============================================================
#include <gtk/gtk.h>
#include <stdlib.h>
#include <stdio.h>
// gcc pdf_maker_v4.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);
// on sépare en deux processus le programme :
if (fork() == 0)
{
gtk_main_quit();
// 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
exit(0);
}
else {
// le processus père continue...
}
}
//------------------------------------------------------------
===========================================================