[Résolu][Java] Insertion document et perte de style sous Writer

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 !
tomatoes
Membre OOrganisé
Membre OOrganisé
Messages : 87
Inscription : 31 mai 2010 11:58

[Résolu][Java] Insertion document et perte de style sous Writer

Message par tomatoes »

Bonjour,

De nouveau nous avons un code qui marchait en Libre Office 7 et qui ne marche plus en 24.

J'ai un document writer de 2 pages avec une entete et un pied de page (style defaut) on va l'appeler A.odt.
Et j'ai un document d'une page avec une entete avec comme style qui se nomme master1 on va appeler ce fichier B.odt.

Etape 1: J'ouvre une copie de document A.odt (je suis à 2 pages)
Etape 2: Je rajoute un breakpage (je suis à 3 pages)
Etape 3: Je rajoute un B.odt (je suis à 3 pages)
Etape 4: Je rajoute un breakpage (je suis à 4 pages)
Etape 1.2: Je rajoute un A.odt (je suis à 5 pages)
Etape 2.2: Je rajoute un breakpage (je suis à 6 pages)
etc...

Sur le libre office 7 j'ai bien l'entête et le pieds de page defaut sur les 2 premières pages puis sur la page 3 l'entête Master1 puis sur la page 4 et 5 l'entête defaut etc.
En libre office 24 j'ai l'entête et le pieds de page defaut seulement sur les 2 premieres pages après j'ai seulement l'entête Master1.

Pour le breakpage je fais .uno:GoToEndOfDoc puis .uno:InsertPagebreak (dans mon code la méthode s'appelle addPageBreak()

Voici le code ci dessous d'une itération (Etape 2 et 3) et en PJ le fichier avec entete Master1 qui empêche d'avoir les entêtes defaults sur les pages suivantes et qui garde l'entête Master1 jusqu'à la fin du document

En vous remerciant par avance

Code : Tout sélectionner

if (pageBreak) {
				AppliToolkit.afficher( "addPagebreak" );
				addPagebreak();
			}

			_xText = _xtextdocument.getText();
			XTextRange xEnd = _xText.getEnd();

			XPropertySet xCursorProps = (XPropertySet) UnoRuntime.queryInterface( XPropertySet.class, xEnd );
			OooToolkit.setPropertyStyle( xCursorProps, null ); // On set les styles

			XTextCursor	textCursor = _xText.createTextCursor();
			synchronized (getConnector()) {
				textCursor.gotoEnd( false );
			}

			XDocumentInsertable xdi = (XDocumentInsertable) UnoRuntime.queryInterface( XDocumentInsertable.class, textCursor );
			synchronized (getConnector()) {
				xdi.insertDocumentFromURL( url, null );
			}
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par tomatoes le 09 déc. 2024 16:04, modifié 3 fois.
Libre office 24.2.6 sous Windows 10
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1480
Inscription : 18 janv. 2008 09:02
Localisation : Val de Marne

Re: [Java] Différence de comportement insertion document en LibreOffice 24

Message par jeanmi2403 »

Bonjour,
Je n'ai pas de réponse, mais quand je lis la procédure, je pense qu'il y a un hic :
Etape 1: J'ouvre ce document A.odt (je suis à 2 pages)
Etape 2: Je rajoute un breakpage (je suis à 3 pages)
Etape 3: Je rajoute un B.odt (je suis à 3 pages)
Etape 4: Je rajoute un breakpage (je suis à 4 pages)
Etape 1.2: Je rajoute un A.odt (je suis à 5 pages)
Etape 2.2: Je rajoute un breakpage (je suis à 6 pages)
J'espère que le premier A n'est pas le même que le second, sinon c'est difficile à modéliser......
Cordialement
Jean-Michel
LibO 24.2 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 24.8 sur OpenSuse & Linux MX
tomatoes
Membre OOrganisé
Membre OOrganisé
Messages : 87
Inscription : 31 mai 2010 11:58

Re: [Java] Différence de comportement insertion document en LibreOffice 24

Message par tomatoes »

Bonjour

Quand on ouvre le 1er A.odt cela ouvre un fichier copie en écriture dans le programme Java, c'est sur ce fichier que l'on va rajouter des pages et où on va reinserer ce A.odt originel plusieurs fois.

A la fin de la construction de ce fichier nous l'enregistrons en TOTO.odt

J'espère avoir été plus clair

Bien cordialement
Libre office 24.2.6 sous Windows 10
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1480
Inscription : 18 janv. 2008 09:02
Localisation : Val de Marne

Re: [Java] Différence de comportement insertion document en LibreOffice 24

Message par jeanmi2403 »

Bonjour,
Donc, tu ouvres une copie de A.
En étant précis, on se comprend mieux.
Et ça donne quoi en le faisant "a la main" ?
Je vais essayer de le faire en Basic, pour voir ce que ça donne.
A plus
Jean-Michel
LibO 24.2 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 24.8 sur OpenSuse & Linux MX
tomatoes
Membre OOrganisé
Membre OOrganisé
Messages : 87
Inscription : 31 mai 2010 11:58

Re: [Java] Différence de comportement insertion document en LibreOffice 24

Message par tomatoes »

Bonjour

Voici dans mon scénario mon fichier B.odt qui enleve les entêtes de page sur les pages suivantes

Bien cordialement
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre office 24.2.6 sous Windows 10
Avatar de l’utilisateur
Dolev
SuppOOrter
SuppOOrter
Messages : 1140
Inscription : 19 août 2018 05:20

Re: [Java] Différence de comportement insertion document en LibreOffice 24

Message par Dolev »

Bonjour,

Il manque le A.odt
Et je ne vois pas l'intérêt d'insérer un B.odt qui ne contient rien.
La gestion d'entête/pied de page se fait via les styles de page
Open Office 4.1.15 sous Windows 11
tomatoes
Membre OOrganisé
Membre OOrganisé
Messages : 87
Inscription : 31 mai 2010 11:58

Re: [Java] Différence de comportement insertion document en LibreOffice 24

Message par tomatoes »

Bonjour

voici le A.odt.

Dans la pratique il y a du texte dans le corps de texte de B.odt mais déjà sans le texte cela ne marche pas donc j'ai fournis le fichier au plus simple
Oui je savais pour les styles de pages et les entêtes, avant la version 24 on avait quand on insérait Style A puis Style B puis Style A puis Style B etc.
Style A
Style B
Style A
Style B
etc...

En version 24 quand on fait le même scénario et le même code cela donne
Style A
Style B
Style B (alors qu'on insère le document avec Style A)
Style B

Bonne après midi
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre office 24.2.6 sous Windows 10
Avatar de l’utilisateur
Dolev
SuppOOrter
SuppOOrter
Messages : 1140
Inscription : 19 août 2018 05:20

Re: [Java] Différence de comportement insertion document en LibreOffice 24

Message par Dolev »

Vous devriez importer tous vos styles dans A.odt
Puis insérer un saut de page en précisant le style souhaité (Master1).
En Basic, on aura ceci :

Code : Tout sélectionner

sub Main
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(2) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Kind"
args1(0).Value = 3
args1(1).Name = "TemplateName"
args1(1).Value = "Master1"
args1(2).Name = "PageNumber"
args1(2).Value = 0

dispatcher.executeDispatch(document, ".uno:InsertBreak", "", 0, args1())


end sub
Open Office 4.1.15 sous Windows 11
tomatoes
Membre OOrganisé
Membre OOrganisé
Messages : 87
Inscription : 31 mai 2010 11:58

Re: [Java] Différence de comportement insertion document en LibreOffice 24

Message par tomatoes »

Bonjour Dolev

merci pour la piste, j'ai essayé ce code et cela ne changeait rien mais en continuant mes recherches j'ai fais ainsi et cela fonctionne

Code : Tout sélectionner

com.sun.star.frame.XModel xModel = (XModel) com.sun.star.uno.UnoRuntime.queryInterface( com.sun.star.frame.XModel.class,
						_xcomponent );

XTextViewCursorSupplier xTextViewCursorSupplier = (XTextViewCursorSupplier) UnoRuntime.queryInterface( XTextViewCursorSupplier.class,
						xModel.getCurrentController() );
				
XTextViewCursor xTextViewCursor = xTextViewCursorSupplier.getViewCursor();

XPageCursor xpCur = (XPageCursor) UnoRuntime.queryInterface( XPageCursor.class, xTextViewCursor );
xpCur.jumpToPage( new Integer( 3 ).shortValue() );//Si on veut seter le style sur la page 3 par exemple

XPropertySet xCursorProps = (XPropertySet) UnoRuntime.queryInterface( XPropertySet.class, xTextViewCursor.getStart() );
				
xCursorProps.setPropertyValue( "PageDescName", "Standard" );//Qui est le style par défaut dans mon cas mais on peut mettre un style définit comme Master1

Bonne soirée et encore merci
Libre office 24.2.6 sous Windows 10