PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Convertir un document au format docx vers le format PDF avec les fonctions OLE d'Open Office
Convertir un document au format docx vers le format PDF avec les fonctions OLE d'Open Office
Débuté par Eric, 25 mar. 2020 15:21 - Aucune réponse
Membre enregistré
3 messages
Posté le 25 mars 2020 - 15:21
Bonjour

J'avais trouvé 2 procédures pour générer un fichier PDF à partir d'un fichier Word qui fournissaient un meilleur résultat que la fonction de Windev. Ce code ne fonctionne plus et m'indique que le tableau dynamique n'a pas été alloué (Code erreur : 2301)
sur la ligne :
oExportObject>>Set("[]com.sun.star.beans.PropertyValue",tParams);


Je pense que c'est depuis le passage de Windev 22 à 25, J'ai réinstallé les versions de LibreOffice v6.3, 6.2, 6.1, 6.0 et même v5, cela ne change rien.

Quelqu'un a-t-il une idée ?

Procedure CreateProperty(oServiceManager,__tArgs,_sName est une chaîne,_vValue)

TableauAjoute(__tArgs)
iNbOccurences est un entier = __tArgs..Occurrence

__tArgs[iNbOccurences] = oServiceManager>>Bridge_GetStruct("com.sun.star.beans.PropertyValue")
__tArgs[iNbOccurences]>>Name = _sName
__tArgs[iNbOccurences]>>Value = _vValue


Procedure DocumentVersPDF(LOCAL _sDocCheminComplet est une chaîne,_sDocPDFCheminComplet est une chaîne="")

LOCAL
oServiceManager est un objet OLE dynamique
oDesktop est un objet OLE dynamique
oDocument est un objet OLE dynamique
sMess est une chaîne

SI PAS fFichierExiste(_sDocCheminComplet) ALORS
sMess = "Le document source n'existe pas."
ExceptionDéclenche(1,sMess)
FIN

QUAND EXCEPTIONEXCEPTION DANS
// Création d'un service OpenOffice si nécessaire
oServiceManager = allouer un objet OLE ("com.sun.star.ServiceManager")
oDesktop = oServiceManager>>createInstance("com.sun.star.frame.Desktop")
FAIRE
sMess = "OpenOffice n'est pas installé sur votre poste."
ExceptionDéclenche(1,sMess)
FIN

tParams est un tableau de 0 objet automation dynamique //Tableau de paramètres

//Masqué
CreateProperty(oServiceManager,tParams,"Hidden",Vrai)
//Lecture seule
//CreateProperty(oServiceManager,tParams,"ReadOnly",faux)

//Formatage du chemin du fichier
LOCAL
sDocCheminCompletTmp est une chaîne

sDocCheminCompletTmp = "file:///"+Remplace(_sDocCheminComplet,"\","/")
//Ouverture du fichier dans OpenOffice Writer
oDocument = oDesktop>>LoadComponentFromURL(sDocCheminCompletTmp,"_blank",0,tParams)
SI oDocument = Null ALORS
ExceptionDéclenche(1,"Impossible de charger le document source.")
FIN

TableauSupprimeTout(tParams)
//CreateProperty(oServiceManager,tParams,"Magnification",2)
//CreateProperty(oServiceManager,tParams,"EncryptFile",vrai)
//CreateProperty(oServiceManager,tParams,"DocumentOpenPassword","Password")
//CreateProperty(oServiceManager,tParams,"HideViewerWindowControls",vrai)

oExportObject est un objet OLE dynamique
oExportObject = oServiceManager>>Bridge_GetValueObject()
oExportObject>>Set("[]com.sun.star.beans.PropertyValue",tParams);

tFilterParams est un tableau de 0 objet automation dynamique
CreateProperty(oServiceManager,tFilterParams,"FilterName","writer_pdf_Export")
CreateProperty(oServiceManager,tFilterParams,"FilterData",oExportObject)

SI _sDocPDFCheminComplet = "" ALORS
_sDocPDFCheminComplet = fExtraitChemin(_sDocCheminComplet,fDisque+fRépertoire+fFichier)+".pdf"
FIN

LOCAL
sDocPDFCheminCompletTmp est une chaîne

sDocPDFCheminCompletTmp = "file:///"+Remplace(_sDocPDFCheminComplet,"\","/")

oDocument>>StoreToURL(sDocPDFCheminCompletTmp,tFilterParams);

oDocument>>Close(Vrai);

CAS EXCEPTION:
sMess = "Erreur lors de la sauvegarde du document : "+RC
sMess += "'"+_sDocCheminComplet+"'"+RC
sMess += "vers le document : "+RC
sMess += "'"+_sDocPDFCheminComplet+"'."+RC
ExceptionPropage(sMess+RC+RC+ExceptionInfo(errComplet))


Merci d'avance.