PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → [WD11] - Imprimer un fichier PDF existant ?
[WD11] - Imprimer un fichier PDF existant ?
Débuté par David, 07 sep. 2007 12:37 - 12 réponses
Posté le 07 septembre 2007 - 12:37
Bonjour,
J'ai plusieurs fichier PDFs que je voudrais envoyer en impression à partir d'un programme windev 11.
Cela est-il possible ?
Je sais que l'on peut créer sois-même les pdfs (déjà fait) mais une fois les fichiers créés, peut-on les imprimer ?

Merci d'avance

Cordialement
David
Posté le 07 septembre 2007 - 12:54
PROCEDURE ImpressionFichier(ListeFichiers,Imprimante="",Nb=1)
NomFichier est chaîne
b est entier
c est entier
NomPromgrammeAssocie est chaîne
NbSecondes est entier
ImpDef est chaîne = iInfoImprimante(Faux,iNomImprimante)
EtatImpression est booléen

SELON Imprimante
CAS ""
CAS "?"
iParamètre()
AUTRE CAS
iConfigure(Imprimante,Faux)
FIN

BOUCLE
b++
NomFichier=ExtraitChaîne(ListeFichiers,b,";")
SI NomFichier=EOT ALORS SORTIR
SI fRep(NomFichier,frFichier)<>"" ALORS
EtatImpression=Vrai
NomPromgrammeAssocie=WindowsNomAppliAssociee(NomFichier,0)
SI NomPromgrammeAssocie<>"" ALORS
POUR c=1 A Nb
SI LanceAppliAssociée(NomFichier, "print") ALORS
Multitâche(200)
SINON
EtatImpression=Faux
SORTIR
FIN
FIN
FIN
FIN
FIN

SI Imprimante<>"" ALORS
iConfigure(ImpDef,Faux)
FIN

RENVOYER EtatImpression



PROCEDURE WindowsNomAppliAssociee(Fic,Type=1)
// Type=0 -> nom de l'exe de l'appli associée
// Type=1 -> chemin de l'exe de l'appli associée
// Type=2 -> Titre de l'appli associée
// Type=3 -> les 3 séparés par TAB

SI Fic="" ALORS RENVOYER ""
NomFichier est une chaîne = Fic

SI Position(Fic,"\")>0 ALORS
NomFichier=ExtraitChaîne(Fic,ChaîneOccurrence(Fic,"\")+1,"\")
FIN

Extension est chaîne

SI Position(NomFichier,".")>0 ALORS
Extension=ExtraitChaîne(NomFichier,2,".")
SINON
Extension=NomFichier
FIN

SI Extension="" ALORS RENVOYER ""

NomClasse est chaîne = RegistreLit("HKEY_CLASSES_ROOT\."+Extension,"")

SI NomClasse="" ALORS RENVOYER ""

CharRetour est chaîne
SI Type<>2 ALORS
NomProg est une chaîne
c est entier

NomPromgrammeAssocie est chaîne =
RegistreLit("HKEY_CLASSES_ROOT\"+NomClasse+"\Shell\Open\Command","")

SELON Vrai
CAS Position(NomPromgrammeAssocie," %")>0
NomPromgrammeAssocie=ExtraitChaîne(NomPromgrammeAssocie,1," %")
CAS Position(NomPromgrammeAssocie,""""+"%")>0
NomPromgrammeAssocie=ExtraitChaîne(NomPromgrammeAssocie,1,""""+"%")
AUTRE CAS

FIN

SI Position(NomPromgrammeAssocie,"""")>0 ALORS
NomPromgrammeAssocie=Remplace(NomPromgrammeAssocie,"""","")
// Chaine du style : "c:\programfiles..." "%1"
TANTQUE fRep(NomProg,frFichier)=""
c++
SI ExtraitChaîne(NomPromgrammeAssocie,c,"\")=EOT ALORS SORTIR
SI NomProg<>"" ALORS NomProg=NomProg+"\"
NomProg=NomProg+ExtraitChaîne(NomPromgrammeAssocie,c,"\")
FIN
SINON
NomProg=NomPromgrammeAssocie
FIN
NomProg=SansEspace(NomProg)
SI Type=1 OU Type=3 ALORS
CharRetour=NomProg
FIN

SI Type=0 OU Type=3 ALORS
SI CharRetour<>"" ALORS CharRetour=CharRetour+TAB
CharRetour=CharRetour+ExtraitChaîne(NomProg,ChaîneOccurrence(NomProg,"\")+1,"\")
FIN
FIN

SI Type=2 OU Type=3 ALORS
SI CharRetour<>"" ALORS CharRetour=CharRetour+TAB
CharRetour=CharRetour+RegistreLit("HKEY_CLASSES_ROOT\"+NomClasse,"")
FIN

RENVOYER CharRetour


David a exposé le 07/09/2007 :

Bonjour,
J'ai plusieurs fichier PDFs que je voudrais envoyer en impression à partir
d'un programme windev 11. Cela est-il possible ?
Je sais que l'on peut créer sois-même les pdfs (déjà fait) mais une fois les
fichiers créés, peut-on les imprimer ?

Merci d'avance

Cordialement
David


--
Pierre BOUSQUET

" Ne me dites pas que ce problème est difficile.
S'il n'était pas difficile, ce ne serait pas un problème. "
Posté le 07 septembre 2007 - 13:26
//Si on dispose d'Adobe Reader on peut faire :

LanceAppliAssociée("F:\Mon Répertoire_PDF\MONFICHIER.PDF","PRINT")

//successivement pour chaque fichier (mettre en liste)
Posté le 07 septembre 2007 - 13:57
Bonjour

merci pour ces deux réponses.

Elles sont assez proches finalement de ce que j'ai testé (API ShellExecute de windows qui correspond à la fonction LanceAppliAssociée), mais ça ne convient pas vraiment car lorsque l'on lance l'impression avec acrobat, ce dernier s'ouvre pour imprimer, ce qui est assez disgracieux et de plus il reste ouvert après l'impression ...

Cordialement
David
Posté le 07 septembre 2007 - 14:42
ben sinon si tu pars du principes que tu utilises Acrobat reader pour
imprimer, il faut utiliser les OLE et parcourir
http://partners.adobe.com/public/developer/en/acrobat/sdk/pdf/iac/IACReference.pdf
je crois qu'il y a une fonction open et print


David a formulé ce vendredi :
Bonjour

merci pour ces deux réponses.

Elles sont assez proches finalement de ce que j'ai testé (API ShellExecute de
windows qui correspond à la fonction LanceAppliAssociée), mais ça ne convient
pas vraiment car lorsque l'on lance l'impression avec acrobat, ce dernier
s'ouvre pour imprimer, ce qui est assez disgracieux et de plus il reste
ouvert après l'impression ...

Cordialement
David


--
Pierre BOUSQUET

" Ne me dites pas que ce problème est difficile.
S'il n'était pas difficile, ce ne serait pas un problème. "
Posté le 07 septembre 2007 - 15:15
non justement c'est ce que je ne veux pas.
Acrobat reader n'est pas la bonne solution pour imprimer.
Je cherche justement autre chose qui pourrait ne pas utiliser l'association de fichier avec acrobat.

David
Posté le 07 septembre 2007 - 18:34
Salut !
Va voir sur le site www.be-dev, dans vitrine logiciel il a un programme
gratuit qui fait cela en ligne de commande et dans le forum, il y a même
moyen de télécharger le projet !

Bien à toi !

--
Marcel Berman
Président de Be-Dev
Membre du conseil d'administration de Windasso
Be-dev et Windasso sont des groupes d'utilisateurs de Windev, Webdev et
Windev Mobile
produits par la société PC-Soft (France)
Posté le 08 septembre 2007 - 01:51
On 7-Sep-2007, marcel.berman@managingbusiness.be wrote:

Salut !
Va voir sur le site www.be-dev, dans vitrine logiciel il a un programme
gratuit qui fait cela en ligne de commande et dans le forum, il y a même
moyen de télécharger le projet !

Bien à toi !



oups .... www.be-dev.be sorry !

--
Marcel Berman
Président de Be-Dev
Membre du conseil d'administration de Windasso
Be-dev et Windasso sont des groupes d'utilisateurs de Windev, Webdev et
Windev Mobile
produits par la société PC-Soft (France)
Posté le 10 septembre 2007 - 11:42
Bonjour,

oui c'est exactement ce que je viens de développer en fait, mais ça me pose aussi quelques problèmes ... ça ne veut pas imprimer (rien ne se passe lors du "AX>>print()" ou "AX>>printall()" ou autre ...)
Pourtant le doc se charge bien dans l'activex et je peux faire "imprimer" manuellement dans la zone activex, mais l'appel d'impression activex , lui, ne fonctionne pas.

Votre projet ne fonctionne donc pas non plus (même principe).

En fait ça a imprimé la première fois, et depuis plus moyen ...

Mais bon je vais trouver.

Sinon je me suis inscrit sur le forum histoire de voir un peu ce qu'il s'y passe.

Merci
David
Posté le 11 décembre 2007 - 17:06
Bonjour,
j'utilise les DDE d'acrobat pour faire cela. J'ai même le choix de l'imprimante avec cette commande. Voici l'exemple:

//************************* envoi sur l'imprimante *********************************
id est un entier
aplilancee est un entier
afficheerreur est un entier
SI PAPIERTEMP = 1 ALORS
//---On boucle pour attendre le lancement de acrobat reader
aplilancee = ExeLancé("Acrobat.exe")
TANTQUE ExeLancé("Acrobat.exe") = Faux
DDELance("C:\Program Files\Adobe\Acrobat 7.0\Acrobat\Acrobat.exe",DDEIconise,Faux)
FIN
//---Connexion à la liaison DDE de acrobat
id = DDEConnecte("acroview","control")
afficheerreur = DDEErreur(id)
//---Dans le cas où Acrobat n'avait pas terminé de charger ses plug-ins
TANTQUE id = 0
id = DDEConnecte("acroview","control")
FIN
//---On sélectionne temporairement l'imprimante de notre choix
//iConfigure("hp880c",Vrai)
iConfigure(LISTE_IMP..ValeurAffichée,Vrai)
//---On ouvre le document à imprimer
DDEExécute(id,"[DocOpen("+Caract(34)+fichierpdffinal+Caract(34)+")]")
//---On lance une impression silencieuse sur l'imprimant de notre choix
DDEExécute(id,"[FilePrintTo("+Caract(34)+fichierpdffinal+Caract(34)+","+Caract(34)+iInfoImprimante(Vrai,iNomImprimante)+Caract(34)+","+Caract(34)+iInfoImprimante(Vrai,iNomDriver)+Caract(34)+","+Caract(34)+iInfoImprimante(Vrai,iNomPort)+Caract(34)+")]")
//---On ferme le document PDF
// trace("[DocClose("+Caract(34)+nomfichierpdf+Caract(34)+")]")
DDEExécute(id,"[DocClose("+Caract(34)+fichierpdffinal+Caract(34)+")]")
//---On quitte acrobat reader
// trace("[AppExit()]")
DDEExécute(id,"[AppExit()]")
DDEDéconnecte(id)
FIN


LISTE_IMP est une liste contenant toutes les imprimantes installée sur le pc. voici son code d'initialisation

sListeImprimante est une chaîne
sListeImprimante = iListeImprimante()
ListeAjoute(LISTE_IMP, sListeImprimante)
Salutation
Posté le 12 décembre 2007 - 11:18
Salut !
Tu peux trouver un projet WD11 qui utilise l'activex Acrobat sur
www.be-dev.be dans la rubrique Téléchargement.

Bien à toi !

--
Marcel Berman
Président de Be-Dev (www.be-dev.be)
Membre du conseil d'administration de Windasso
Be-dev et Windasso sont des groupes d'utilisateurs de Windev, Webdev et
Windev Mobile
produits par la société PC-Soft (France)
Posté le 05 mars 2011 - 10:23
pourrait avoir les coordonnées email de Marcel Berman Président de Be-Dev afin qu'il me transmettre URL du projet WD11 qui utilise l'activex Acrobat car je ne retrouve pas le projet sur la section telechargement du site Be-Dev

Merci
Posté le 05 mars 2011 - 23:39
vas sur le site be-dev.be dans membre...


"KITSON" <kitokoroland@yahoo.fr> a écrit dans le message de groupe de
discussion : 3ed3299f01b1e02d75a9e3ac4366f656@news.pcsoft...

pourrait avoir les coordonnées email de Marcel Berman Président de Be-Dev
afin qu'il me transmettre URL du projet WD11 qui utilise l'activex
Acrobat car je ne retrouve pas le projet sur la section telechargement du
site Be-Dev

Merci