[Résolu][Writer]hyperlien comprenant une variable

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
bracho
Membre OOrganisé
Membre OOrganisé
Messages : 72
Inscription : 19 nov. 2007 16:31

[Résolu][Writer]hyperlien comprenant une variable

Message par bracho »

bonjour a tous.

je cherche a generer un hyperlien dans une macro writer vers une url locale comprenant une variable.

j'ai redige une serie de macro qui me permettent d'obtenir une chaine de ce type : vString = repertoireCourant + "page.html"

chaine que j'associe ensuite a mon curseur en utilisant : v.HyperLinkURL = convertToUrl(vString)

jusqu'ici, tout va bien, et ma page page.html s'affiche sans probleme.

en revanche, si j'essaie de passer une variable dans l'url, en ecrivant : vstring = repertoireCourant + "page.html?var=3", rien ne va plus et j'obtiens un message d'erreur :
file:///C:/Repertoire/page.html%3Fvar=3
Le chemin d'accès spécifié n'existe pas.

ce qui m'ennuie un peu, c'est que, sans le ? fatidique (c'est-a-dire quand l'hyperlien fonctionne), le chemin s'affiche comme ceci dans mon navigateur :
C:\Repertoire\page.html
alors que l'hyperlien apparait comme ceci dans le document writer :
file:///C:/Repertoire/page.html

or, pour que je puisse ouvrir une url locale avec variable dans mon navigateur, il faut que je tape l'adresse imperativement sous la deuxieme forme (l'adresse C:\Repertoire\page.html?var=3 tapee dans la barre d'adresse me produit le meme message d'erreur que lorsque que j'appelle cette adresse depuis mon document writer, alors que l'adresse file:///C:/Repertoire/page.html?var=3 fonctionne).

quelqu'un aurait une idee pour contraindre l'hyperlien a s'ouvrir dans mon navigateur sous la forme file:///c:/etcaetera... ?

merci par avance pour vos reponses.

windowsxp
openoffice 2.4
ie7 et mozilla3
Dernière modification par bracho le 03 juil. 2009 18:49, modifié 2 fois.
OpenOffice 3.3.0 sous Windows XP SP2
bracho
Membre OOrganisé
Membre OOrganisé
Messages : 72
Inscription : 19 nov. 2007 16:31

Re: hyperlien comprenant une variable

Message par bracho »

je precise ma question, desole.

j'ai un peu progresse, et il semble que le probleme vienne du fait que le .hyperLink encode automatique le ? en %3F, ce qui empeche ensuite mon navigateur de comprendre qu'il s'agit d'une requete aux fins de passer une variable (et il cherche donc le fichier nomme page.html?var=3, qui n'existe bien evidemment pas).

comment faire pour empecher cet encodage du ? au moment de la creation de l'hyperlien ?

cela devrait suffire a resoudre mon probleme...
OpenOffice 3.3.0 sous Windows XP SP2
bm92
ManitOOu
ManitOOu
Messages : 2562
Inscription : 26 nov. 2005 13:42

Re: [Writer]hyperlien comprenant une variable

Message par bm92 »

Bonjour,
Ton adresse est particulière, car elle comporte des arguments destinés à un serveur. En principe l'adresse de fichier devrait être une adresse réseau (genre http://), pas une adresse de fichier local. Et avec une adresse externe, on ne fait pas de conversion URL puisque c'en est une.

Regarde ce qui se passe quand on crée un tel hyperlien avec l'interface utilisateur : quand on tape l'adresse du fichier (Windows), le panneau affiche une conversion en adresse URL. Dès qu'on ajoute le "?" l'adresse n'est plus convertie.
Peut-être que la solution est de ne pas convertir en URL l'adresse. À toi de tester.
Bernard

OpenOffice.org 1.1.5 fr / Apache OpenOffice 4.1.1 / LibreOffice 5.0.5.2 (X64)
MS-Windows 7 SP1 64bits Familial
bracho
Membre OOrganisé
Membre OOrganisé
Messages : 72
Inscription : 19 nov. 2007 16:31

Re: [Writer]hyperlien comprenant une variable

Message par bracho »

merci pour ta reponse.

a vrai dire, j'ai deja reduit la creation de l'hyperlien au strict minimum :

vCursor.HyperlinkURL = "file:///C:/Repertoire/page.html?var=3"

ca ne fonctionne malheureusement pas.

je suis alle voir dans le fichier content.xml, et le resultat de ma macro ressemble a ca :

<text:a xlink:type="simple" xlink:href="file:///C:/Repertoire/page.html?var=3" text:style-name="Internet_20_link" text:visited-style-name="Internet_20_link">D4</text:a>

j'en viens donc a la conclusion (mais peut-etre suis-je dans l'erreur) qu'il faudrait que je trouve un moyen de forcer le code "xlink:href" a ne pas %encoder l'adresse.

et ce qui aurait tendance a m'inquieter un peu, c'est que le code html suivant :

<a href="file:///C:/Repertoire/page.html?var=3"> page3 </a>

fonctionne sans difficulte.

j'en viens donc a craindre que ce ne soit une limitation du xml (que je ne parviens pas a forcer).

mais peut-etre ai-je mal compris la suggestion de bernard ?

merci par avance pour votre aide.

edit de 14 heures :

encore plus rageant : si j'exporte mon document au format pdf, mes hyperliens fonctionnent parfaitement.
personne n'aurait une idee pour queles hyperliens fonctionnent de la meme maniere dans un document odt que dans ce meme document odt exporte au format pdf ?
OpenOffice 3.3.0 sous Windows XP SP2
bm92
ManitOOu
ManitOOu
Messages : 2562
Inscription : 26 nov. 2005 13:42

Re: [Writer]hyperlien comprenant une variable

Message par bm92 »

Tout ce que je peux ajouter, c'est que ce n'est pas un problème de macro mais un problème lié au traitement par OpenOffice.org d'un hyperlien contenant une adresse fichier suivie d'argument.
Parce qu'avec une adresse internet, aucun problème. Par exemple avec
http://user.services.openoffice.org/fr/ ... m.php?f=24
Bernard

OpenOffice.org 1.1.5 fr / Apache OpenOffice 4.1.1 / LibreOffice 5.0.5.2 (X64)
MS-Windows 7 SP1 64bits Familial
Avatar de l’utilisateur
Grenouille
ManitOOu
ManitOOu
Messages : 3223
Inscription : 13 janv. 2006 16:21
Localisation : Chasseneuil-du-Poitou / Futuroscope

Re: [Writer]hyperlien comprenant une variable

Message par Grenouille »

Bonsoir,
bm92 a écrit :mais un problème lié au traitement par OpenOffice.org d'un hyperlien contenant une adresse fichier suivie d'argument.
Parce qu'avec une adresse internet, aucun problème. Par exemple avec
http://user.services.openoffice.org/fr/ ... m.php?f=24
Pourtant l'url que tu donnes dispose bien d'un argument (f=24).

Il faudrait voir le code plus en détail et si possible l'ODT qui utilise la macro pour comprendre tout provient l'erreur.

A+
OpenOffice 4.1.5 et LibreOffice 5.3.4 (par obligation) sous Windows 7
bracho
Membre OOrganisé
Membre OOrganisé
Messages : 72
Inscription : 19 nov. 2007 16:31

Re: [Writer]hyperlien comprenant une variable

Message par bracho »

merci pour cette reponse.

je pourrais vous communiquer le code, mais je crois vraiment que le probleme se resume a la creation de l'hyperlien.

le mystere s'epaissit d'ailleurs (et me fait craindre que le difficulte vienne d'open office) : j'ai exporte, pour voir, mon fichier au format pdf. et la, les hyperliens fonctionnent sans probleme (ma variable passe par l'url, et je la recupere sans difficulte dans mes javascripts).

serait-ce une 'issue' referencee ?
OpenOffice 3.3.0 sous Windows XP SP2
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26195
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Writer]hyperlien comprenant une variable

Message par Dude »

Je ne comprends pas pourquoi tu passes des paramètres à une URL fichier. L'interprétation n'est possible qu'avec une URL de type http (ou https). Cela me semble logique.

:!:
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
bracho
Membre OOrganisé
Membre OOrganisé
Messages : 72
Inscription : 19 nov. 2007 16:31

Re: [Writer]hyperlien comprenant une variable

Message par bracho »

pour resumer, je suis en train de developper une interface pour exploiter des dossiers papier numerises.

je dispose pour chaque dossier d'un materiau brut : une masse de fichiers pdf nommes avec une ou deux lettres suivies de cinq chiffres : A00023.pdf, Ce00258.pdf, ... (sans aucune indication sur le contenu du fichier).

ce point de depart n'est pas modifiable. apres tout est ouvert...

l'idee se decline en deux temps :
- pour permettre la visualisation des dossiers pdf (sans recours a une application commerciale type adobe standard), j'ai cree une page html avec des javascripts qui permettent d'afficher une liste cliquable des fichiers (A0001.pdf, A00002.pdf, etc.), qui creent deux boutons de defilement (avant-arriere) et qui affichent le fichier pdf choisi. je n'ai pas trouve plus souple et plus portable, meme si je reconnais que c'est un peu un detournement du principe du navigateur web (mes fichiers se trouvent soit sur le disque dur local de l'utilisateur, soit sur un lecteur reseau, mais, dans tout les cas, je n'utilise pas le protocole http).
- pour permettre une exploitation plus poussee, je cree un "sommaire', plus ou moins detaille (et que chaque intervenant pourra completer a sa guise) au format openoffice writer. a chaque occurrence de ce qui peut ressembler a un nom de fichier (A25, Ca12, D13), une macro me genere un hyperlien qui doit pointer non pas seulement vers le fichier considere, mais vers la page html de visualisation affichant ce fichier (pour permettre ensuite a l'utilisateur de naviguer dans le dossier).

voila en gros les donnees du probleme.

pour l'instant, j'ai trouve une solution qui fonctionne mais qui est beaucoup trop lourde : la macro qui genere les hyperliens me genere pour chaque hyperlien un fichier html distinct (en fait mon visualisateur integrant la donnee "compteur" correspondant au fichier considere). j'obtiens donc des fichiers vA00001.html, vCa00012.html... vers lesquels pointent mes hyperliens. c'est totalement insatisfaisant parce que ca me genere des milliers de fichiers html qui ont tous le meme contenu a un nombre pres. mais ca a le merite de fonctionner...

la vraie bonne solution, ce serait de ne generer qu'un seul fichier html pour chaque dossier, et que l'hyperlien passe en variable a ce fichier html la reference du fichier concerne. j'en reviens donc a ma question initiale : j'ai besoin de lire un fichier C:/dossiers/dossier1/dossier1.html?Ca00012.pdf ou H:/bureau2/dossier12/dossier12.html?D00002.pdf

c'est donc la raison de ma question (mais je suis preneur de tout autre idee).

ce qui est rageant, c'est que les macros que j'ai redigees fonctionnent a merveille si j'exporte le document au format pdf. et que le document content.xml contient bien un href qui conserve le "?" (ce qui veut dire, si je comprends bien, que le %encodage est effectue au moment de l'interpretation du xml pas au moment ou le code xml est genere par openoffice, ce qui etait l'un de mes espoirs car j'aurais pu envisager d'intervenir directement sur content.xml).

or j'ai besoin de communiquer le document odt pour que chaque intervenant puisse le completer.

je ne comprends pas trop pourquoi l'encodage se fait systematiquement pour une adresse de fichier contenant un "?" (alors que, sauf erreur, un nom de fichier ne peut pas contenir de "?"). et le format pdf m'a l'air plus coherent a cet egard, puisqu'il ne %encode pas le "?".

donc voila : je suis preneur si quelqu'un a une autre idee pour faire ce que je souhaite faire, mais sinon, est-il possible d'eviter ce %encodage par openoffice ?
OpenOffice 3.3.0 sous Windows XP SP2
bracho
Membre OOrganisé
Membre OOrganisé
Messages : 72
Inscription : 19 nov. 2007 16:31

Re: [Writer]hyperlien comprenant une variable

Message par bracho »

bonjour a tous.

j'avais pose il y a quelques temps une question car je ne parvenais pas a creer des hyperliens pointant vers des pages web stockees en local, hyperliens comprenant un parametre (en clair, des hyperliens de cette forme : file:///C:/MonRepertoire/maPageWeb.html?monparametre).

comme je l'indiquais a l'epoque, le probleme reside dans le fait que writer %encode le signe "?", de sorte que mon hyperlien pointe en fait vers file:///C:/MonRepertoire/maPageWeb.html%3Fmonparametre, fichier qui n'existe pas (c'est une specificite de writer : adobe reader, ie ou firefox font tres bien la difference entre un hyperlien vers une adresse http:// - qu'ils %encodent - ou vers une adresse file:/// -qu'ils ne %encodent pas).

c'etait donc ma question, qui n'est toujours pas resolue. et qui commence a me poser un serieux probleme au stade de developpement du projet dans lequel elle se pose.

j'envisage donc de prendre la difficulte a bras le corps en redigeant une macro qui cree (de zero) l'hyperlien (afin de forcer writer a ne pas %encoder ce lien).

quelqu'un s'est-il deja lance dans cette voie ?

merci par avance pour votre aide.
OpenOffice 3.3.0 sous Windows XP SP2
Adrien Schiehle
Membre OOrganisé
Membre OOrganisé
Messages : 80
Inscription : 01 juil. 2009 07:24

Re: [Writer]hyperlien comprenant une variable

Message par Adrien Schiehle »

Bonjour,

je me permet de te renvoyer sur le post de Diarra
http://user.services.openoffice.org/fr/ ... =8&t=17285


Son code permet d'exécuter une commande externe.

En gros ce qui peut t 'interesser c'est

Code : Tout sélectionner

sv = createUnoService("com.sun.star.system.SystemShellExecute")
sv.execute(Adresse, "",0)
Et contrairement a son code, la variable Adresse tu l'initialise de la manière suivante :

Code : Tout sélectionner

Adresse = "firefox " + <nom_du_fichier> + "?" + <argument>
Voila
OpenOffice 3.2 sous Redhat 4.6
OpenOffice 3.2 sous Windows XP
bracho
Membre OOrganisé
Membre OOrganisé
Messages : 72
Inscription : 19 nov. 2007 16:31

Re: [Writer]hyperlien comprenant une variable

Message par bracho »

Merci beaucoup pour cette réponse.

En fait, j'ai effectivement besoin de lancer une commande externe. En l'occurrence, j'ai choisi de lancer plutôt :

Code : Tout sélectionner

Sub visionneuseIE()
  If (IsEmpty(IE)) then
    oObj = createUnoService( "com.sun.star.bridge.OleObjectFactory")
    IE = oObj.createInstance("InternetExplorer.Application.1")
  End If
  oDoc = ThisComponent
  oText = oDoc.getText() 
  oCurseur = oDoc.CurrentController.ViewCursor()
  vString = monFichierHtml() + "?" + monParametre(oCurseur.HyperLinkURL) 'le paramètre est calculé à partir de l'URL associée à l'hyperlien de la forme "#D12"
  On Error GoTo IEError
   IE.Visible = True
   IE.Navigate(vString,1)
  Exit Sub
  IEError:
  MsgBox "La fenêtre Internet Explorer a été fermée de manière intempestive." & (Chr(13)) & "Vous devez recharger ce document en sélectionnant 'Recharger' dans le menu 'Fichier'." & (Chr(13)) & "VEILLEZ, SI NECESSAIRE, A SAUVEGARDER AUPARAVANT LES MODIFICATIONS EN COURS" , MB_ICONEXCLAMATION
End Sub
La véritable difficulté résidait dans le fait de lancer cette commande depuis un hyperlien. J'ai fini par m'en sortir (d'une manière pas forcément très élégante) en :
- renvoyant l'hyperlien vers une URL neutre (en fait une URL commençant par # renvoyant donc à une section inexistante dans le présent document),
- et en associant à l'événement "onClick" de l'hyperlien le lancement de la procédure ci-dessus :

Code : Tout sélectionner

Sub insererEvenements()
  Dim vDescriptor, vFound, vString, vFoundCursor, tempHyperLinkEvents
  'Recherche de toutes les occurrences de la forme A42, D1, C25, Ba13, etc.
  vDescriptor = ThisComponent.createSearchDescriptor()
  With vDescriptor
    .SearchRegularExpression = True
    .SearchCaseSensitive = False
    .SearchString = "[A-D][a-z]{0,1}[0-9]{1,5}" 
  End With
  vFound = ThisComponent.findFirst(vDescriptor) 
  Do While Not IsNull(vFound)
    vFoundCursor = vFound.Text.createTextCursorByRange(vFound)
    vFoundCursor.HyperLinkURL = "#" + vFound.getString() 'je renvoie l'hyperlien vers une URL inactive


    ' j'associe à l'événément onClick le lancement de la macro visionneuseIE
    Dim mEventProps(1) as new com.sun.star.beans.PropertyValue
    mEventProps(0).Name = "EventType"
    mEventProps(0).Value = "Script"
    mEventProps(1).Name = "Script"
    mEventProps(1).Value = "vnd.sun.star.script:Standard.Module1.visionneuseIE?language=Basic&location=document"

    temp1 = vFoundCursor.HyperLinkEvents
    temp1.replaceByName("OnClick", mEventProps())
    vFoundCursor.HyperLinkEvents = temp1
    vFound = ThisComponent.findNext(vFound.End, vDescriptor)
  Loop
End Sub
Voilà, ça n'est sans doute pas très élégant, mais ça a le mérite de fonctionner.

Je vais donc considérer, sans grande conviction, que mon problème est résolu...

Merci encore pour ta réponse.
OpenOffice 3.3.0 sous Windows XP SP2