masquer un style à l'impression

Bonjour

Cemoi Cemoi wrote

est il possible de remplacer un style par un caractére uniquement à
l'impression?
Ou à default est il possible de masquer un style uniquement à
l'impression?

Ce qui serait possible serait de faire le travail par macro (appelée
aussi depuis la ligne de commande). La macro ouvre le(s) document(s),
modifie l'attribut du style (masqué) puis exporte.

Voir un exemple approchant ici :
http://ask.libreoffice.org/en/question/46586/how-to-automatically-update-indices-in-headless-mode/#46632

Cordialement
Pierre-Yves

Bon j'ai été chercher programmation openoffice.org et libreoffice à la
bibliothèque... j'ai un sacré travail avant de comprendre
l'environnement... il y a des bouts de macro qui correspondent exactement
à ce que je veux faire. Mais comme je n'ai aps encore l'api en main ça va
me prendre encore un peu de temps. Je viendrai faire le retour de mes
aventures. J'hésite à apprendre python pour faire tout ça mais je crois que
je vais m'en tenir à ce que j'ai de plus documenté en exemple.

Cordialement

Bonjour,
je m'en sors difficilement là...
voila un document d'exemple:
http://matlane2000.free.fr/divers/macros_libo/Cours_echelles.odt

voila une macro pour remplacer style1 par style2:
http://matlane2000.free.fr/divers/macros_libo/macro_remplace_style1_par_style2
voila une macro pour remplacer atrribut Y par attribut Y:
http://matlane2000.free.fr/divers/macros_libo/macros_remplace_par_attributs

Au final vide ça ne va pas il me faut des ............................. à
la place des lettres. Je dois pouvoir remplacer le style1 par un style2 qui
me met que des ..............? Non?

Merci pour votre aide.

Bonjour

Cemoi Cemoi wrote

Au final vide ça ne va pas il me faut des ............................. à
la place des lettres. Je dois pouvoir remplacer le style1 par un style2
qui
me met que des ..............? Non?

Un style ne pourra pas remplacer du texte par un autre (les ...). On
peut bien sûr rechercher les paragraphes mis en forme par un style et
remplacer leur contenu par un autre texte.

Mais le plus simple me semble être de mettre la même couleur
pour l'arrière-plan et le texte. Dans l'exemple joint j'applique un
gris pour que la zone à remplir soit matérialisée.

option explicit

const sNomStyle = "Texte prof"

Sub PysChangerStyle
dim oDoc as object, oStyles as object, oStyle as object

oDoc = thiscomponent
oStyles = oDoc.styleFamilies.getByName("ParagraphStyles")

if oStyles.hasByName(sNomStyle) then
  oStyle = oStyles.getByName(sNomStyle)
  with oStyle
    .CharColor = RGB(238,238,238)
    .CharBackColor = RGB(238,238,238)
  end with
else
  msgbox "Style " & sNomStyle & " non trouvé", 64, "Modification pour
impression"
end if

End Sub

Cordialement

Bonjour,
oui je comprends l'idée mais sans ... ou ___ ça va être moyen pour ecrire
sur les documents. Ca fait quelques jours que je bidouille mais j'ai finit
par arrivé à faire ce que je veux voici la macro pour que cela puisse
profiter à d'autres.

Option Explicit

     Sub traiteFichier()
    Dim oDoc as Object, searchDescriptor as Object, resultat as Variant
    Dim i as Integer, range as Object, cursor as Object, valChamp as String
       oDoc = thisComponent
       searchDescriptor = oDoc.createSearchDescriptor()
       With searchDescriptor
          .SearchString = "Texte prof"
          .searchStyles = True
       End With
       resultat = oDoc.findAll(searchDescriptor)
       If resultat.hasElements() Then
          For i = 0 To resultat.Count-1
             range = resultat(i)
             cursor = range.Text.createTextCursor()
             cursor.goToRange(range, false)
             cursor.collapsetostart()
             cursor.goRight(len(range.string), true)
             valChamp = String(len(range.string),"_")
             cursor.String = valChamp
          Next i
       EndIf
    End Sub

Je voudrai maintenant l'exploiter mais je m'aperçoie que j'ai un problème:
à partir du fichier de cours prof je veux sortir des pdf avec les parties
de textes du styleprof remplacées par des ___ mais je ne veux que le pdf de
modifié et surtout pas le fichier source...

Je voudrais arrivé à appliquer cette macro sur toute une arborescense qui
contient plusieurs milliers de fichiers de cours à traiter... le but étant
de générer les versions eleves en pdf à partir des cours prof.

Quand la macro sera complette je compte la transformer en .oxt via
l'interface GUI puis l'importer sur le serveur et l'intégrer avec un unopkg
add maMacro.oxt

Bref j'ai encore du travail mais je n'ai pas le choix je ne peux pas
traiter les fichiers un à un sans compter q'ils faut les tenir à jour...

La macro au depart doit parcourir l'arborescense pour trouver tous les
fichiers *.odt, ajouter le mot eleve au nom de chaque fichier trouver
modifier les stylesprof en ______ puis exporter au format pdf.

C'est énorme mais c'est faisable...
Pour le moment j'ai des fichiers de cours prof et des fichiers de cours
eleve, en shell je me sers de find+libo pour faire l'export en pdf. Ca
donne ça;
find /home/cemoi/Documents/bac -type f -iname "*ele*.odt" -execdir
libreoffice --headless --convert-to pdf '{}' \;

Ca marche tres bien mais nous avons des difficultés pour tenir les cours
eleves bien à jour d'ou cette histoire de macro qui fait presque tout sauf
le cafe...

Merci pour votre aide tres precieuse!

j'oubliais: j'ai déja cherché pour ajouter le mot eleve mais à un
repertoir... et pas en recursif

post; sub main

repBase="/home/cemoi/owncloud/perso/test_macro/"
fichier = dir(repBase+"*eleve*.odt")
while fichier<>""
   call traiteFichier(repBase+fichier)
   fichier = dir()
wend

end sub

en cherchant j'ai vu ça:

Instruction Name [Exécution]
Renomme un fichier ou répertoire existant.
Syntaxe :
Name OldName As String As NewName As String
Paramètres :
OldName, NewName : expression au format chaîne de caractères indiquant le
nom de fichier, chemin d'accès compris. Vous pouvez également utiliser la
notation URL.

mais je n'arrive pas à l'intégrer dans ma boucle...

Bonjour

Cemoi Cemoi wrote

je comprends l'idée mais sans ... ou ___ ça va être moyen pour ecrire
sur les documents.

Oui... si je t'avais proposé d'utiliser le blanc. Or ma proposition était de
recourir à un léger gris qui va créer l'équivalent visuel d'une zone de
saisie.

Je préfère cela à un souligné qui me rappelle trop les anciens documents
administratifs à remplir. Choix subjectif donc...

Par ailleurs j'ai le sentiment que cela sera plus rapide à l'exécution que
le
remplacement du texte. Ce n'est qu'un sentiment, je n'ai fait aucun essai,
mais, compte tenu du volume de documents à traiter cela peut entrer en
ligne de compte...

Cemoi Cemoi wrote

...je ne veux que le pdf de modifié et surtout pas le fichier source...
... La macro au depart doit parcourir l'arborescense pour trouver tous les
...fichiers *.odt, ajouter le mot eleve au nom de chaque fichier

Si tu appelles ta macro dans un script, pourquoi ne pas simplement
copier en renommant tes documents dans le script puis manipuler
ces copies dans ta macro ?

Sinon, en basic tu peux utiliser la fonction GetFileNameWithoutExtension
de la bibliothèque Tools, par exemple :

dim sNomDoc as string, sNewNomDoc as string

GlobalScope.BasicLibraries.LoadLibrary("Tools")

sNomDoc = convertToUrl("c:\Tests\a.odt")
sNewNomDoc = GetFileNameWithoutExtension(sNomDoc)
sNewNomDoc = sNewNomDoc & "Eleve.odt"

Name sNomDoc As sNewNomDoc

Cordialement
Pierre-Yves

@ Pierre C

regarde plus haut la macro que j'ai mise elle fonctionne bien pour ce que
tu veux faire.

@ Pierre-Yves
j'ai commencé à faire ça;

post; sub main

repBase="/home/cemoi/owncloud/perso/test_macro/"
fichier = dir(repBase+"*_eleve*.odt")
while fichier<>""
   call traiteFichier(repBase+fichier)
   fichier = dir()
wend

end sub

Mais je ne comprends pas tout ce que je fais là... :confused:

en fait je tente de faire ce que je fais deja en shell mais en basic...
En shell ça donne ça:

#! /bin/bash

find /home/cemoi/Documents/cible -type f -iname "*cours*.odt" |
    while read name
    do
        new_name=$(echo $name|sed 's/\.odt$/_eleve.odt/')
        if [ "$name" -nt "$new_name" ]
        then
            cp "$name" "$new_name"
        fi
    done

Ca parcours l'arborescense du repertoir cible en y cherchant tous les
fichier odt ayant le mot cours (sans prendre en compte la casse) ça y
ajoute le prefix _eleve au nom existant de chaque fichier trouvé puis ça
copie le fichier si le fichier source fait le même poids si non non.

à la suite dans la macro je voudrai ajouter le code

Option Explicit
Sub RemplacerStyle()
Dim oDoc As Object, searchDescriptor As Object
   oDoc = ThisComponent
   searchDescriptor = oDoc.createReplaceDescriptor
   With searchDescriptor
      .SearchString = "Texte prof"
      .ReplaceString = "Blanc"
      .SearchStyles = true
   End With
   oDoc.replaceAll(searchDescriptor)
End Sub

pour l'appliquer en recursif sur le repertoir cible sur chaque fichier odt
ayant le mot eleve et en fin faire l'export en pdf une fois les styles
modifié.

L'intéret de tout faire en basic c'est de pouvoir faire un .oxt une fois
que tout ça fonctionnera.

Merci pour votre aide precieuse!

Cordialement, cemoi.

@Fs
Texte prof c'est le nom du style
dans lequel tous les caractéres seront remplacé par des __

tu ouvres un doc de test tu crais un style Texte prof puis tu l'appliques à
une partie du texte. Apres ça tu charges et exécutes la macro.

Pour ma première partie du script sensé faire la meme chose que la version
en shell et bien ça ne marche pas et ça ne retourne aucune erreur... du
coup je tourne en rond :confused:

@Fs
Je me suis trompé de macro... c'est celle là la bonne:

Sub traiteFichier()
Dim oDoc as Object, searchDescriptor as Object, resultat as Variant
Dim i as Integer, range as Object, cursor as Object, valChamp as String
   oDoc = thisComponent
   searchDescriptor = oDoc.createSearchDescriptor()
   With searchDescriptor
      .SearchString = "Texte prof"
      .searchStyles = True
   End With
   resultat = oDoc.findAll(searchDescriptor)
   If resultat.hasElements() Then
      For i = 0 To resultat.Count-1
         range = resultat(i)
         cursor = range.Text.createTextCursor()
         cursor.goToRange(range, false)
         cursor.collapsetostart()
         cursor.goRight(len(range.string), true)
         valChamp = String(len(range.string),"_")
         cursor.String = valChamp
      Next i
   EndIf
End Sub

Cordialement.

J'ai continué à travailler sur ma macro je pense que je vais faire un autre
sujet pour que le titre soit explicite.

Je mets le code ici quand même:

Option Explicit
'LG Global monTab() as String
dim monTab() as String

Sub CopierFichier
Dim Chemin as String, NomFichier as String, Fichier(), NewName as String
Dim X as Integer

' LG initialise
Redim monTab(0)

   Chemin = ConvertToURL("/home/cemoi/Documents/bac/seconde/")'le chemin
est à adapter à l'emplacement des fichiers
   NomFichier = Dir(Chemin & "Cours*.odt")
   X = 0
   Do While NomFichier <> ""
      Fichier = Split(NomFichier,".")
      NewName = Fichier(0) & "_eleve.odt"
     'LG
     X = X +1
' reDim Preserve monTab(X)
        redim Preserve monTab(1 to X)
      monTab(X) = ConvertToURL(Chemin & NewName)
      Filecopy ConvertToURL(Chemin & NomFichier), monTab(X)
      NomFichier = Dir()
     ' LG inutile X = X + 1
   Loop
   RemplacerStyle
End Sub

Sub RemplacerStyle()
Dim oDocument as Object, searchDescriptor As Object
Dim Args(0) as New com.sun.star.beans.PropertyValue
Dim i as Integer
   Args(0).Name = "Hidden"
   Args(0).Value = True 'LG essaye dejà avec false

FOR i=1 to UBound(monTab)
'LG For i = 0 to UBound(monTab)
      oDocument = StarDesktop.loadComponentFromURL(monTab(i),"_blank",0,Args
())
      searchDescriptor = oDocument.createReplaceDescriptor
      With searchDescriptor
         .SearchString = "Texte prof"
         .ReplaceString = "Blanc"
         .SearchStyles = True
      End With
      oDocument.replaceAll(searchDescriptor)
      oDocument.Store()
      ExportPDF(oDocument,monTab(i))
   Next i
End Sub

Sub ExportPDF(oDoc as Object,monFichier as String)
Dim oURL as String
Dim Args(0) as New com.sun.star.beans.PropertyValue
   oURL = Left(monFichier,CInt(Len(monFichier))-3) & "pdf"
   Args(0).Name = "FilterName"
   Args(0).Value = "writer_pdf_Export"
   oDoc.storeToURL(oUrl,args())
   oDoc.Close(True)
   Kill(monFichier)
   MsgBox("Le fichier " & ConvertFromURL(oURL) & " à été créé")
End Sub

Il n'est pas terminé mais pas loin :slight_smile: