Bonjour,
Je rencontre un problème lorsque je souhaite imprimer un fichier PDF (ce n'est pas un report Access).
La problématique est la suivante :
Les utilisateurs pour qui je développe mon application doivent utiliser des formulaires CERFA mis à disposition par l'administration. Les modèles sont des formulaires PDF qui peuvent être remplis.
J'ai donc développé un process qui, à partir de données Access, crée un fichier de données intégrable au PDF (fichier FDF), et qui est fusionné avec le formulaire PDF d'origine dans un fichier PDF final.
Pour fusionner ces données, j'utilise l'utilitaire pdftk (utilisable en mode commande) que j'appelle via l'instruction shell
Pour imprimer le PDF généré, j’utilise une fonction windows que j'ai déclaré comme ceci :
Le process est découpé de la manière suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 '--------------------------------------------------------------------------------------- ' Fonction pour ouvrir le fichier PDF '--------------------------------------------------------------------------------------- Private Declare Function OuvrirPDF Lib "shell32" Alias "ShellExecuteA" _ (ByVal hwnd&, ByVal lpOperation$, ByVal lpFile$, ByVal lpParameters$, _ ByVal lpDirectory$, ByVal nShowCmd&)
- création du fichier fdf
- fusion du formulaire pdf et du fichier fdf (utillisation de l'utilitaire pdftk)
- déplacement du fichier pdf généré dans le répertoire cible et suppression des fichiers de travail
- Impression du fichier pdf présent dans répertoire cible.
Le problème se situe entre les phase 2 et 3 du process, aboutissant à une erreur dans la phase 4:
la phase 2 est une procédure qui n'exécute que l'utilitaire pdftk. l'exécution peut demander un certain temps, et j'ai essayé de sécuriser l'exécution de celle-ci de la manière suivante
Le problème est que l'instruction file.FileExists devient vrai à partir du moment ou le fichier commence à être généré, et pas au moment ou la génération est terminée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Public Sub pdftk(param1, param2 ...) .. constitution dynamique de la chaine de commande rc = Shell(str, vbHide) Set file = CreateObject("Scripting.FileSystemObject") Do Until file.FileExists(<fichier de sortie généré>) DoEvents Loop ... suppression des fichiers de travail end sub
Résultat : la phase 3 démarre alors que la phase 2 n'est pas complètement achevée (je recopie un fichier incomplet, voire vide), ce qui déclenche une erreur lors de la phase 4 (le fichier est incorrect).
Comment contourner ce problème ?
Partager