Philippe Allart | 8 Apr 15:20

Utiliser les "streams"

Bonjour,

Ce post juste pour savoir si on peut maitriser l'utilisation des streams 
à partir de OOoBasic.

La macro ci-dessous permet d'insérer du code html dans un document writer.

J'utilise la méthode InsertDocumentFromURL.  Ca marche, mais il faut 
d'abord que le code soit écrit dans un fichier, ce qui suppose de 
trouver un nom temporaire, de le supprimer, etc. Je voudrais optimiser ça.

Lors de mes recherches, j'ai trouvé le service TempFile qui n'est rien 
d'autre qu'un canal, avec les interfaces XInputStream et XOutputStream, 
qui offrent respectivement les méthodes readBytes et writeBytes (on peut 
observer tout ça avec Xray)

Et justement, le paramètre propfich() passé à InsertDocumentFromURL peut 
contenir la propriété InputStream. L'idée serait donc de créer un 
stream, d'envoyer le code HTML dans le stream avec writeBytes, puis de 
passer l'interface InputStream à InsertDocumentFromURL avec propfich().

J'ai essayé d'envoyer le code HTML dans writeBytes, mais ça ne marche 
pas. On dirait qu'il faut impérativement transformer la chaîne en un 
tableau d'entiers.

Comme ça devenait trop compliqué, j'ai laissé tomber, et j'en suis resté 
avec un fichier temporaire.

j'ai vu aussi qu'il existait la méthode WriteUTF qui permet d'injecter 
une chaîne UTF dans un objet DataOutputStream, mais ça me fait une belle 
jambe, parce que je n'ai pas trouvé comment le connecter avec un objet 
DataInputStream...

Voilà ou j'en suis. Si quelqu'un a des idées, je suis preneur.

Bien librement

Ph.

--

'---------------------------------------------------------------------------------------------------

Sub InsererHTML(unCurseur as Object, contenu as String)
Dim propfich() as New com.sun.star.beans.PropertyValue
Dim URL as String

    URL= ContenuVersURL("<html><head><meta http-equiv=""content-type"" 
content=""text/html; charset=UTF-8""</head><body>" & _
                             contenu & "</body></html>")
    unCurseur.insertDocumentFromURL(URL, propfich())
    kill(URL)
end Sub

'----------------------------------------------------------------------------------------------------

Function ContenuVersURL(contenu as String) as string
Dim f1 as Integer
Dim nomTemp as String

nomTemp = NomFichierTemporaire(".html")
f1 = Freefile
open nomTemp For Output As #f1
print #f1, contenu
Close #f1

ContenuVersURL = nomTemp

end Function

'----------------------------------------------------------------------------------------------------

Function CreerCanal() as object
CreerCanal =  CreateUnoservice("com.sun.star.io.TempFile")
end function

'----------------------------------------------------------------------------------------------------

Function NomFichierTemporaire(ext as String) as String
Dim stream as Object
'
' Astuce pour obtenir un nom de fichier temporaire
'
stream = CreerCanal()
NomFichierTemporaire = stream.Uri & ext

End Function

Gmane