[Résolu][Calc] Enregistrer un fichier en PDF suivant une zone d'impression

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 !
lucno
Membre OOrganisé
Membre OOrganisé
Messages : 69
Inscription : 15 déc. 2009 22:16

[Résolu][Calc] Enregistrer un fichier en PDF suivant une zone d'impression

Message par lucno »

Bonjour,

Je souhaite imprimer en PDF une facture, qui se trouve sur la feuille "Facture" à l'aide du bouton dédié. Mon problème, c'est que les 3 feuilles du fichiers se retrouvent dans le PDF.
J'ai pourtant défini une zone d'impression, mais comme cela ne semblait pas suffire, j'ai également défini une zone d'impression dans la macro. Avec la macro, je vois que la zone est sélectionnée, mais le résultat est le même : 3 feuilles dans le PDF. Par contre si j'utilise aperçu avant impression, j'ai bien une seule feuille à l'écran. La boite de dialogue Fichier - exporter en PDF - Option PDF général est coché : sélection/Feuille(s)...

Ayant récupérer des bouts de code sur le forum (sans trop comprendre ce qu'il y avait dedans), je me dis qu'il y a quelque chose dans le code qui annihile la zone d'impression. Quelqu'un peut-il m'aider à trouver ce qu'il faut changer.

merci d'avance

PS: en anonymisant le fichier joint (suppression de texte et des formules sur la feuille calc j'ai cassé la dernière ligne de la macro ???
Erreur d'exécution BASIC.
Une exception s'est produite :
Type: com.sun.star.io.IOException
Message: SfxBaseModel::impl_store <file:///C:/Septembre%202024.pdf> failed: 0x507(Error Area:Io Class:Access Code:7).

Luc
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par micmac le 28 oct. 2024 08:03, modifié 2 fois.
Raison : Ajout de la coche verte
LibreOffice Version:7.3.7.2 - Windows 10 (version de mon travail. Le service informatique ne veut pas changer de version)
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Enregistrer un fichier en PDF suivant une zone d'impression

Message par Dude »

Salut,

On va encore le répéter mais il faut systématiquement :
  1. Poster le code dans le message car cela nous évite de télécharger inutilement un document.
  2. Eviter de nommer le document "essai", "test", c'est pénible.
Si je clique sur le bouton, OpenOffice affiche :
capture.png
Regardons la macro :

Code : Tout sélectionner

Sub Essai_Facture_pdf
Dim mondocument as object
Dim propFich(0) as New com.sun.star.beans.PropertyValue 
Dim adressedoc as string
Dim nomclient as string, url as string, repertoire as string, extension as string, MonTxt as string

mondocument = thisComponent 

repertoire = "file:C:\" 
rem ----------------------------------------------------------------------
rem Récupération du contenu de la cellule D5
rem ----------------------------------------------------------------------
MaFeuil = MonDocument.CurrentController.ActiveSheet
MonTxt = MaFeuil.GetCellRangeByName("D5").String 
extension = ".pdf" 
url = repertoire + MonTxt + extension 
'-------- définition zone impression
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$1:$D$46"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
dispatcher.executeDispatch(document, ".uno:DefinePrintArea", "", 0, Array())
'---------- fin zone impression

adressedoc = converttourl(url) 
propFich(0).Name = "FilterName" 
propFich(0).Value = "calc_pdf_Export" 
mondocument.storeToURL( adressedoc, propFich())

''''''''''''''EFFACER LA ZONE D'IMPRESSION''''''''''''''''''''
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:DeletePrintArea", "", 0, Array())

End Sub
C'est quoi cette définition de la variable repertoire ?
A minima, il faut convertir un chemin avec ConvertToUrl
Et je ne suis pas fan de la génération de fichier à la racine du disque.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1466
Inscription : 18 janv. 2008 09:02
Localisation : Val de Marne

Re: [Calc] Enregistrer un fichier en PDF suivant une zone d'impression

Message par jeanmi2403 »

Bonsoir,
Dude a raison,

Code : Tout sélectionner

repertoire = "file:C:\" 
m'est tout aussi bizarre et ne correspond à rien. Puisqu'ensuite tu convertis :

Code : Tout sélectionner

adressedoc = converttourl(url) 
Pour que ça fonctionne correctement, il faut que tu définisse ton répertoire Windows comme un chemin classique :

Code : Tout sélectionner

repertoire = "C:\" 
Pour éviter l'impression des trois pages, il faudrait trouver le paramètre qui correspond au bouton "Sélection/Feuilles"
Pour la définition de la zone d'impression, tu codes :

Code : Tout sélectionner

dispatcher.executeDispatch(document, ".uno:DefinePrintArea", "", 0, Array())
Ca fonctionnerait mieux avec args1() :shock:
Cordialement,
Jean-Michel
LibO 24.2 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 24.8 sur OpenSuse & Linux MX
lucno
Membre OOrganisé
Membre OOrganisé
Messages : 69
Inscription : 15 déc. 2009 22:16

Re: [Calc] Enregistrer un fichier en PDF suivant une zone d'impression

Message par lucno »

Bonjour,

Merci pour vos informations.

Le code, je ne l'ai pas écrit moi-même, je l'ai trouvé sur le forum et comme je l'ai dit je ne comprends pas tout ce qui est écrit et même très très peu.

J'ai modifié la variable repertoire comme vous me l'avez conseillée, mais sur mon fichier original cela fonctionne tel quel (sans qu'il soit nécessaire de modifier).
Concernant la zone d'impression, elle fonctionne puisqu'elle se voit sur le fichier calc (impression écran de Dude). Pour le code de création et de suppression de la zone d'impression, j'ai enregistré une macro que j'ai inséré au programme.
Pour éviter l'impression des trois pages, il faudrait trouver le paramètre qui correspond au bouton "Sélection/Feuilles"
Avez-vous un indice qui me permettrait de trouver où chercher , un post, une doc, un site ?

merci et bonne journée

Luc
LibreOffice Version:7.3.7.2 - Windows 10 (version de mon travail. Le service informatique ne veut pas changer de version)
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Enregistrer un fichier en PDF suivant une zone d'impression

Message par Dude »

Publie à nouveau le code corrigé et le document.
lucno
Membre OOrganisé
Membre OOrganisé
Messages : 69
Inscription : 15 déc. 2009 22:16

Re: [Calc] Enregistrer un fichier en PDF suivant une zone d'impression

Message par lucno »

Bonjour,

J'ai corrigé la variable repertoire, mais cela ne change rien, le code ne fonctionne toujours pas. Je cherche...

Code : Tout sélectionner

REM  *****  BASIC  *****

Sub Essai_Facture_pdf
Dim mondocument as object
Dim propFich(0) as New com.sun.star.beans.PropertyValue 
Dim adressedoc as string
Dim nomclient as string, url as string, repertoire as string, extension as string, MonTxt as string

mondocument = thisComponent 

repertoire = "C:\" 
rem ----------------------------------------------------------------------
rem Récupération du contenu de la cellule D5
rem ----------------------------------------------------------------------
MaFeuil = MonDocument.CurrentController.ActiveSheet
MonTxt = MaFeuil.GetCellRangeByName("D5").String 
extension = ".pdf" 
url = repertoire + MonTxt + extension 
'-------- définition zone impression
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$1:$D$46"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
dispatcher.executeDispatch(document, ".uno:DefinePrintArea", "", 0, Array())
'---------- fin zone impression

adressedoc = converttourl(url) 
propFich(0).Name = "FilterName" 
propFich(0).Value = "calc_pdf_Export" 
mondocument.storeToURL( adressedoc, propFich())

''''''''''''''EFFACER LA ZONE D'IMPRESSION''''''''''''''''''''
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:DeletePrintArea", "", 0, Array())

End Sub
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par lucno le 25 oct. 2024 08:56, modifié 1 fois.
LibreOffice Version:7.3.7.2 - Windows 10 (version de mon travail. Le service informatique ne veut pas changer de version)
lucno
Membre OOrganisé
Membre OOrganisé
Messages : 69
Inscription : 15 déc. 2009 22:16

Re: [Calc] Enregistrer un fichier en PDF suivant une zone d'impression

Message par lucno »

Voici le document avec un nouveau nom
LibreOffice Version:7.3.7.2 - Windows 10 (version de mon travail. Le service informatique ne veut pas changer de version)
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
Messages : 9580
Inscription : 28 août 2010 08:45

Re: [Calc] Enregistrer un fichier en PDF suivant une zone d'impression

Message par micmac »

Lorsque votre message n'est pas suivi d'une réponse, merci de ne pas poster plusieurs messages à la suite. Vous disposez d'un bouton Modifier le message Image en haut à droite de chaque message et d'un autre bouton ajoutImage si vous désirez ajouter un complément.
Touche Ctrl de Windows = touche cmd⌘ sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur macOS
lucno
Membre OOrganisé
Membre OOrganisé
Messages : 69
Inscription : 15 déc. 2009 22:16

Re: [Calc] Enregistrer un fichier en PDF suivant une zone d'impression

Message par lucno »

Ok, j'ai fait la modif, mais je ne peux pas supprimer le message inutile !
LibreOffice Version:7.3.7.2 - Windows 10 (version de mon travail. Le service informatique ne veut pas changer de version)
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Enregistrer un fichier en PDF suivant une zone d'impression

Message par Dude »

lucno a écrit : 25 oct. 2024 08:02 je ne comprends pas tout ce qui est écrit et même très très peu
Dans ce cas, tu devrais utiliser l'extension Export feuille en PDF.


Ce code ne peut fonctionner en l'état :

Code : Tout sélectionner

propFich(0).Name = "FilterName" 
propFich(0).Value = "calc_pdf_Export" 
mondocument.storeToURL( adressedoc, propFich())
Puisque tu utilises le dispatcher partout, pourquoi ne pas continuer ?

Code : Tout sélectionner

	dim propFich(3) as new com.sun.star.beans.PropertyValue
	dim filtreProps(0) as new com.sun.star.beans.PropertyValue
	filtreProps(0).Name = "PageRange"
	filtreProps(0).Value = "1"
	propFich(0).Name = "FilterName"
	propFich(0).Value = "Calc_pdf_Export"
	propFich(1).Name = "FilterData"
	propFich(1).Value = filtreProps()
	propFich(2).Name = "URL"
	propFich(2).Value = adressedoc
	propFich(3).Name = "Overwrite"
	propFich(3).Value = true
    		
	dispatcher.executeDispatch(document, ".uno:ExportToPDF", "", 0, PropFich())
lucno
Membre OOrganisé
Membre OOrganisé
Messages : 69
Inscription : 15 déc. 2009 22:16

Re: [Calc] Enregistrer un fichier en PDF suivant une zone d'impression

Message par lucno »

J'ai modifié, maintenant j'ai la boite "Option PDF" qui s'ouvre et lorsque je clique sur le bouton enregistrer, j'ai un message d'erreur (en pièce jointe). Le ficher PDF ne se crée pas :cry:

Code : Tout sélectionner

REM  *****  BASIC  *****

Sub Essai_Facture_pdf
Dim mondocument as object
'Dim propFich(0) as New com.sun.star.beans.PropertyValue 
Dim adressedoc as string
Dim nomclient as string, url as string, repertoire as string, extension as string, MonTxt as string

mondocument = thisComponent 

repertoire = "C:\" 
rem ----------------------------------------------------------------------
rem Récupération du contenu de la cellule D5
rem ----------------------------------------------------------------------
MaFeuil = MonDocument.CurrentController.ActiveSheet
MonTxt = MaFeuil.GetCellRangeByName("D5").String 
extension = ".pdf" 
url = repertoire + MonTxt + extension 
'-------- définition zone impression
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$1:$D$46"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
dispatcher.executeDispatch(document, ".uno:DefinePrintArea", "", 0, Array())
'---------- fin zone impression

adressedoc = converttourl(url) 
'propFich(0).Name = "FilterName" 
'propFich(0).Value = "calc_pdf_Export" 
'mondocument.storeToURL(adressedoc, propFich())

dim propFich(3) as new com.sun.star.beans.PropertyValue
	dim filtreProps(0) as new com.sun.star.beans.PropertyValue
	filtreProps(0).Name = "PageRange"
	filtreProps(0).Value = "1"
	propFich(0).Name = "FilterName"
	propFich(0).Value = "Calc_pdf_Export"
	propFich(1).Name = "FilterData"
	propFich(1).Value = filtreProps()
	propFich(2).Name = "URL"
	propFich(2).Value = adressedoc
	propFich(3).Name = "Overwrite"
	propFich(3).Value = true
    		
	dispatcher.executeDispatch(document, ".uno:ExportToPDF", "", 0, PropFich())
''''''''''''''EFFACER LA ZONE D'IMPRESSION''''''''''''''''''''
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:DeletePrintArea", "", 0, Array())

End Sub
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice Version:7.3.7.2 - Windows 10 (version de mon travail. Le service informatique ne veut pas changer de version)
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Enregistrer un fichier en PDF suivant une zone d'impression

Message par Dude »

Erreur typique : le fichier n'est-il pas déjà ouvert par ton lecteur PDF ?
Comme je te l'ai déjà dit :
Dude a écrit : 24 oct. 2024 14:03 Et je ne suis pas fan de la génération de fichier à la racine du disque.
lucno
Membre OOrganisé
Membre OOrganisé
Messages : 69
Inscription : 15 déc. 2009 22:16

Re: [Calc] Enregistrer un fichier en PDF suivant une zone d'impression

Message par lucno »

Non, je ne vois rien s'ouvrir et mon lecteur de PDF n'est pas déjà ouvert.
Le fichier PDF ne se crée pas.
LibreOffice Version:7.3.7.2 - Windows 10 (version de mon travail. Le service informatique ne veut pas changer de version)
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1466
Inscription : 18 janv. 2008 09:02
Localisation : Val de Marne

Re: [Calc] Enregistrer un fichier en PDF suivant une zone d'impression

Message par jeanmi2403 »

Salut,
lucno a écrit : 25 oct. 2024 14:12 Le fichier PDF ne se crée pas.
Chez moi, la procédure copiée telle quelle ne fait rien. Si je change dossier en D:\Travail\, ça fonctionne.
Probablement un problème de permissions.
Cordialement.
Jean-Michel
LibO 24.2 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 24.8 sur OpenSuse & Linux MX
lucno
Membre OOrganisé
Membre OOrganisé
Messages : 69
Inscription : 15 déc. 2009 22:16

Re: [Calc] Enregistrer un fichier en PDF suivant une zone d'impression

Message par lucno »

Bonjour,

Malgré mes recherches, je n'arrivais à trouver, j'allais laisser tomber
Merci pour votre réponse.

Dube avait raison :
Et je ne suis pas fan de la génération de fichier à la racine du disque.
Bonne journée

Luc
LibreOffice Version:7.3.7.2 - Windows 10 (version de mon travail. Le service informatique ne veut pas changer de version)