Bonjour
J'aimerai remplir les champs d'un fichier acrobat (PDF) avec Delphi 2005.
Connaissez-vous la méthode ?
Un composant ? Une Piste ?
Merci
Version imprimable
Bonjour
J'aimerai remplir les champs d'un fichier acrobat (PDF) avec Delphi 2005.
Connaissez-vous la méthode ?
Un composant ? Une Piste ?
Merci
Salut les gens,
En fait, je me permet de faire un petit up du poste ci-dessus, car la solution m'interesse grandement.
Merci!
P.S. J'ai fait une ptite recherche et je vois qu'il y eu plusieurs post pour la meme question, mais sans réponse... Qui sait, peut-etre que depuis, qqun à trouvé la solution :mrgreen:
+ de détails sont nécéssaires,
veut tu créér un fichier PDF, ou en éditer un déja existant ?
La création est fesable via des compos existant (voir google ou torry.net), mais l'édition par contre c'est pas gagné !
Ne serait il pas plus simple de creer un fichier éditable simplement (rtf, doc, ods..) puis de l'exporter en PDF (pour l'exportation il y a des compo payant et gratuits, sinon tu peut utiliser OpenOffice.org en direct si tu a la possibilité de forcer son utilisation pour ton appli).
@+
Alors en fait, j'avais dans l'intention de créer directement le formulaire rempli depuis mon appli (via ReportBuilder), mais finalement il a été décidé que je devais essayer plutot d'utiliser les formulaires déjà existants et de les remplir, comme je le ferais avec Word en utilisant un modèle de document avec des signets.
Voila, j'espère avoir été assez clair.
Merci
A essayer peut être, je n 'ai jamais eu le temps de me pencher plus dessus mais ca m'interesse de voir si ca peut marcher sous Delphi:
http://www.accesspdf.com/pdftk/
Merci pour la piste!
Je viens d'essayer sans delphi, juste en ligne de commande, ca marche. Par contre ca demande quand même de générer le fichier FDF et de le remplir avec les données, afin de pouvoir faire la fusion
Après il suffira surement d'executer la ligne suivante depuis delphi, via l'appel de shell.
Code:pdftk.exe form.pdf fill_form form.fdf output test.pdf flatten
Alors, pour ceux que ca intéresse, voici le code que ca donne.
Il faut donc partir d'un formulaire PDF, on génère le fichier FDF associé et pdftk.exe s'occupe de réunir les deux. (il ne faut pas oublier de supprimer le fichier FDF temporaire, je ne l'ai pas fait ici, par flemme)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62 procedure TForm1.CreeFDF(NomFichier : String; Balises : Array of String; Valeurs : Array of String; NbVal : Integer); var I : Integer; FichierFDF : textfile; begin //Attribution d'un pointeur de fichier assignfile(FichierFDF, NomFichier); Rewrite(FichierFDF); //Inscription de l'entête du fichier writeln(FichierFDF,'%FDF-1.2'); writeln(FichierFDF,'%âãÏÓ'); writeln(FichierFDF,'1 0 obj<</FDF<</Fields['); //Inscription des balises et des données for I := 0 to NbVal - 1 do begin writeln(FichierFDF, '<</T(' + Balises[I] + ')/V(' + Valeurs[I] + ')>>'); end; //Inscription de la fin de fichier writeln(FichierFDF,']>>>>'); writeln(FichierFDF,'endobj'); writeln(FichierFDF,'trailer'); writeln(FichierFDF,'<</Root 1 0 R>>'); writeln(FichierFDF,'%%EOF'); //Fermeture CloseFile(FichierFDF); end; procedure TForm1.CreePDF(NomFichierFDF : String; NomFichierPDF_IN : String; NomFichierPDF_OUT : String; Ouverture : Boolean); var ProgConversion : String; Parametres : String; begin //Nom de l'executable ProgConversion := 'C:\mu\pdftk\pdftk.exe'; //Ligne de parametres de type //FORMULAIRE_VIDE fill_form DONNEES output FORMULAIRE_REMPLI Parametres := NomFichierPDF_IN + ' fill_form ' + NomFichierFDF + ' output ' + NomFichierPDF_OUT; //Création du fichier ShellExecute(0, 'OPEN', PCHAR(ProgConversion), PCHAR(Parametres), Nil, SW_HIDE); if Ouverture then if (MessageDlg('Voulez vous afficher le résultat?', mtConfirmation, [mbYes, mbNo], 0) in [mrYes]) then ShellExecute(0, 'OPEN', PCHAR(NomFichierPDF_OUT), nil, Nil, SW_SHOW); end;
Et les appels :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 procedure TForm1.Button1Click(Sender: TObject); var MesBal : Array of String; MesVar : Array of String; FichierFDF : String; FichierPDF_IN : String; FichierPDF_OUT : String; begin FichierFDF := 'C:\mu\pdftk\data2.fdf'; FichierPDF_IN := 'C:\mu\pdftk\form.pdf'; FichierPDF_OUT := 'C:\mu\pdftk\out.pdf'; SetLength(MesBal, 6); SetLength(MesVar, 6); MesBal[0] := 'Nom'; MesBal[1] := 'Etablissement'; MesBal[2] := 'Adresse'; MesBal[3] := 'Tel'; MesBal[4] := 'DateNaissance'; MesBal[5] := 'Nationalite'; MesVar[0] := 'Moua'; MesVar[1] := 'Hotel'; MesVar[2] := 'Rue de la gare'; MesVar[3] := 'Marcel Vincent'; MesVar[4] := '12.5.72'; MesVar[5] := 'Suisse'; CreeFDF(FichierFDF, MesBal, MesVar, 6); CreePDF(FichierFDF, FichierPDF_IN, FichierPDF_OUT, true); Finalize(MesBal); Finalize(MesVar); end;