PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV (précédentes versions) → [WD22] LanceAppli ou DDELance + pilotage via DDE SumatraPdf
[WD22] LanceAppli ou DDELance + pilotage via DDE SumatraPdf
Débuté par Ramirez22, 24 déc. 2019 11:14 - 3 réponses
Membre enregistré
60 messages
Popularité : +2 (2 votes)
Posté le 24 décembre 2019 - 11:14
Bonjour à toutes/tous,

Je suis toujours sur ma recherche de viewer pdf plus ergonomique que la version de base. Petit rappel de mes contraintes :
- poste utilisateur verrouillé (impossible d'installer quoique ce soit dans le répertoire système)
- viewer PDF par défaut = Adobe acrobat reader

J'ai tenté d'utiliser un activeX avec un fichier manifest externe et j'ai réussi tant bien que mal à faire fonctionner tout ça.

Et puis je suis tombé sur SumatraPDF.

Léger, rapide, ergonomique, top quoi !

En plus, son intégration est d'une simplicité ... Par exemple, pour l'inclure dans un champ fenêtre interne :
LanceAppli(sCheminLecteur + "sumatrapdf.exe -plugin " + Handle(CFI_PDF) + sFichierAAfficher)


Difficile de faire plus simple.
Bon, ombre au tableau, ne gère pas le redimensionnement de la fenêtre avec les ancrage, mais pour ma part, c'est pas grave, je suis en plein écran.

Là où ça devient encore plus intéressant, c'est qu'à priori, on peut le piloter via commandes DDE.
Et c'est là que j'achoppe.

J'ai essayé :
DDELance(sCheminLecteur + "sumatrapdf.exe -plugin " + Handle(CFI_PDF) + sFichierAAfficher)
nConnexionSumatra = DDEConnecte("SUMATRA","control")


Le programme se lance bien, mais le DDEConnecte me renvoie 0. Pas de message d'erreur bloquant, mais un "sens interdit" sur la ligne du programme avec pour tout commentaire : la connexion n'a pas pu être établie. Du coup, pas de DDEErreur, et je suis comme une poule devant un couteau à me demander qu'est-ce que je peux bien faire pour envoyer mes commandes DDE.

J'ai essayé comme paramètres au DDEConnecte:
- Nom destinataire: "sumatra", "sumatrapdf", "sumatrapdf.exe", chemin + "sumatrapdf.exe" en majuscule et minuscule
- Sujet : "control", "Control"

Je me suis basé sur l'aide que j'ai pu glaner sur le site de SumatraPDF :
https://www.sumatrapdfreader.org/docs/Use-Sumatra-as-a-pre-viewer-for-LaTeX-editors.html
https://www.sumatrapdfreader.org/docs/DDE-Commands.html
Est-ce que "Path of executable" implique forcément une installation du soft pour bénéficier du serveur DDE ?

Merci de votre aide SVP !!!

Et, un peu en avance, Noyeux Joël Ho Ho Ho !
Message modifié, 24 décembre 2019 - 11:21
Membre enregistré
509 messages
Popularité : +18 (18 votes)
Posté le 30 décembre 2019 - 11:56
Joyeux Noël ! (un peu en retard) ;)

(ce qui suit est une réflexion hypothétique, je ne connais pas SumatraPDF)

Une chose est certaine... Il faut comprendre qu'une application EXE peut devenir un serveur DDE en fonction des circonstances de son lancement.
SumatraPDF peut fonctionner en tant que serveur DDE, mais ce n'est pas certain que l'option de ligne de commande -plugin permette de décider de lancer la fonctionnalité serveur DDE.

Je crois comprendre qu'historiquement l'option -plugin était prévue pour une intégration dans certains navigateurs internet. Mais cette fonctionnalité peut être réutilisée dans un autre contexte, et c'est tant mieux.

Aussi, avant de vouloir faire fonctionner l'ensemble de manière intégrée, je suggèrerais de procéder par des essais sur des fonctionnalités isolées.

Ici, ce serait bien de faire fonctionner SumatraPDF comme serveur DDE, sans chercher à employer l'option -plugin.
En particulier, il faudrait être certain du nom du serveur DDE, car ce nom n'est pas nécessairement celui du fichier EXE.
Le nom exact du serveur DDE est nécessaire pour ouvrir un canal de communication DDE.
En parcourant les liens, je confirme que : le nom du serveur DDE est 'SUMATRA', le nom du sujet (topic) est 'control'.
En principe avec DDE, les noms du serveur ou du sujet ne sont pas sensibles à la casse des caractères. Mais pour être cohérent avec les exemples, je laisserais SUMATRA en lettres majuscules, et 'control' en lettres minuscules.

Ensuite, si le pilotage DDE de SumatraPDF est un succès, alors je suggère pour l'intégration DDE + Plugin, ...
(a) de commencer par démarrer le serveur DDE avec une ligne de commande à vide (ne pas mentionner de fichier à ouvrir), pour être certain que la fonctionnalité serveur est activée et ouvrir un canal de communication DDE,
(b) puis de relancer l'exécution de SumatraPDF via la ligne de commande et l'option -plugin, avec en plus l'option -reuse-instance pour que la ligne de commande soit effectivement traitée par l'instance déjà lancée qui est aussi le serveur DDE.

À ce stade, il n'y a aucune garantie que le support de l'option -reuse_instance soit prévu pour la prise en charge de l'option -plugin, et inversement. Et même, d'un point de vue logique fonctionnelle, ça me semble peu probable. :(
Mais bon, soit on lit le code source pour le découvrir, soit on tente le coup pour le tester.

Extrait de la page des options de ligne de commande
-reuse-instance : Tells an already open SumatraPDF to load the indicated files. If there are several running instances, behavior is undefined. Only needed when communicating with SumatraPDF through DDE (use the ReuseInstance setting instead otherwise).


Bon courage. :-)
Message modifié, 30 décembre 2019 - 11:58
Membre enregistré
60 messages
Popularité : +2 (2 votes)
Posté le 30 décembre 2019 - 13:00
Bonjour JBO et merci de votre réponse.

J'espère également que vous avez passé un joyeux Noël.

Je confirme vos dires : J'ai réalisés les essais cités et en effet, les différentes options ne sont pas compatibles entres elles : le serveur DDE n'est accessible que lorsque SumatraPDF est lancé en mode fenêtre et non intégré par l'option -plugin.

J'ai eu plus ou moins confirmation de cet état de fait sur le forum de SumatraPDF.

Idem pour l'option -reuse-instance. Je ne suis d'ailleurs pas certain du bon fonctionnement de cette fonction (du moins, pas comme j'aurais voulu qu'elle fonctionne). En effet, à chaque lancement de SumatraPDF avec un nouveau fichier, une nouvelle instance de Sumatra est créée. Il n'y a que si on essaie d'ouvrir un fichier PDF une seconde fois que l'instance est réutilisée.

L'option -restrict est quant à elle prise en compte en mode -plugin, ce qui permet de limiter les fonctions accessibles à l'utilisateur (pas de modification du pdf en cours de lecture, pas d'impression etc ...). Ceci semble paramétrable grâce à un fichier .ini.

Du coup, j'ai intégré SumatraPDF dans mon application car il est rapide et intuitif et correspond parfaitement à mon besoin. Pour changer de fichier PDF, je récupère au lancement l'ID de l'exécutable et je termine l'ID de l'exécutable précédent (s'il existe). Il y a un léger "flash" au moment de la fin du processus et du lancement de l'autre (temps de chargement), mais rien de bien rédhibitoire au vu de la fluidité de navigation constatée. Après, il faut que je fasse un test en conditions réelles (mon PC de dev' fonctionne en mode local, les fichiers PDF sont directement accessibles. En conditions d'exploitation normale, les fichiers seront sur un serveur réseau, le temps de chargement montrera peut-être des défauts...). Quand au pilotage, une barre d'outil est accessible pour le défilement en mode page continue ou unitaire, les zoom etc ...

Merci en tout cas des recherches effectuées pour m'aider. J'allais me répondre à moi-même au cas où quelqu'un chercherait une solution, mais je pensais le faire après les fêtes. Votre message m'a motivé à le faire au plus tôt.

Avec un peu d'avance, meilleurs vœux pour cette nouvelle année.

Bon dev'

Ramirez22
Message modifié, 30 décembre 2019 - 13:00
Membre enregistré
509 messages
Popularité : +18 (18 votes)
Posté le 30 décembre 2019 - 13:24
Re-bonjour Ramirez222,

La lecture de votre message initial était assez motivante.
La connaissance de SumatraPDF apporte un potentiel à ceux qui ne peuvent pas encore passer au champ lecteur PDF intégré de WINDEV 23 et suivants, ou qui se heurtent à une de ses limitations.
D'autant plus intéressant qu'il s'agit d'un projet open-source. :merci:

La possibilité de combiner le pilotage DDE et l'intégration PDF grâce à SumatraPDF aurait été un MUST...

Merci pour votre retour et la couverture complète de la problématique. re-:merci:

En avance aussi, meilleurs vœux pour la nouvelle année. :)
Message modifié, 30 décembre 2019 - 13:24