[Résolu][Java] Insertion image dans un cadre ou tableau au milieu d'une chaîne de caractère
Modérateur : Vilains modOOs
Règles du forum
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 !
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 !
-
- Membre OOrganisé
- Messages : 70
- Inscription : 31 mai 2010 11:58
[Résolu][Java] Insertion image dans un cadre ou tableau au milieu d'une chaîne de caractère
Bonjour,
J'arrive à ajouter une image dans un document normal (c'est à dire sans tableau, sans cadre)
J'arrive à ajouter une image dans un tableau si il n'y a pas de texte dans la cellule (il y a seulement l'image)
Par contre je n'arrive pas à ajouter une image au milieu d'une chaine de caractère dans la cellule d'un tableau et même problème dans un cadre (document qui est une planche d'étiquette). Et j'ai besoin de faire cela pour intercaler une image au milieu d'une String
Je n'ai aucune erreur le XTextCursor semble bien positionné du coup je pense
J'ai fais pas mal d'essais sur les propriétés "AnchorType" et "TextWrap" mais rien je ne vois pas mon image sur le document
Merci grandement pour votre aide
Bonne journée
J'arrive à ajouter une image dans un document normal (c'est à dire sans tableau, sans cadre)
J'arrive à ajouter une image dans un tableau si il n'y a pas de texte dans la cellule (il y a seulement l'image)
Par contre je n'arrive pas à ajouter une image au milieu d'une chaine de caractère dans la cellule d'un tableau et même problème dans un cadre (document qui est une planche d'étiquette). Et j'ai besoin de faire cela pour intercaler une image au milieu d'une String
Je n'ai aucune erreur le XTextCursor semble bien positionné du coup je pense
J'ai fais pas mal d'essais sur les propriétés "AnchorType" et "TextWrap" mais rien je ne vois pas mon image sur le document
Merci grandement pour votre aide
Bonne journée
Dernière modification par tomatoes le 20 févr. 2023 18:14, modifié 8 fois.
Libre office 24.2.6 sous Windows 10
-
- RespOOnsable forum
- Messages : 9580
- Inscription : 28 août 2010 08:45
Re: [JAVA] Insertion image dans un cadre ou tableau au milieu d'une String
Bonjour,
Merci de joindre votre code.
Merci de joindre votre code.
Touche Ctrl de Windows = touche cmd⌘ sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur macOS
Outils > Options sur Windows = OpenOffice > Préférences sur macOS
-
- Membre OOrganisé
- Messages : 70
- Inscription : 31 mai 2010 11:58
[Java] Insertion image dans un cadre ou tableau au milieu d'une chaîne de caractère
Voici
merci
merci
Code : Tout sélectionner
public void testAjoutImagePrecisDansTableauOuCadre( ) {
String template = "<IMAGE_ICI>";
if (isConnected()) {
try {
synchronized (getConnector()) {
_xtextdocument = (XTextDocument) UnoRuntime.queryInterface( XTextDocument.class, _xcomponent );
if (_xtextdocument != null) {
Object[]o=goTo( template );
XTextCursor textCursor = (XTextCursor) o[1];
XTextRange xTextRange = (XTextRange) o[0];
try {
XMultiServiceFactory xMSF = (XMultiServiceFactory) UnoRuntime.queryInterface( MultiServiceFactory.class,
_xtextdocument );
XTextContent xImage = (XTextContent) UnoRuntime.queryInterface( XTextContent.class,
xMSF.createInstance( "com.sun.star.text.TextGraphicObject" ) );
XPropertySet xProps = (XPropertySet) UnoRuntime.queryInterface( XPropertySet.class, xImage );
xProps.setPropertyValue( "GraphicURL", "file:///C:/toto.jpg");
xProps.setPropertyValue( "Print", true );
xProps.setPropertyValue( "Width", (int) 300);// Largeur de l'image
xProps.setPropertyValue( "Height", (int) 300);// Hauteur de l'image
xProps.setPropertyValue( "AnchorType", com.sun.star.text.TextContentAnchorType.AS_CHARACTER );
xProps.setPropertyValue( "TextWrap", com.sun.star.text.WrapTextMode.THROUGHT );
xProps.setPropertyValue( "Opaque", false ); // En arrière plan
textCursor.getText().insertTextContent( textCursor, xImage, false );
} catch (Exception e) {
}
}
}
} catch (Exception ex) {
isc.util.log.LogUtil.getLogger().error( "Erreur", ex );
}
}
}
// Renvoi un XTextRange et un XTextCursor à l'endroit où on trouve la balise champ
public Object[] goTo( String champ) {
XTextRange xTextRange = null;
XTextCursor textCursor = null;
if (isConnected() && champ != null) {
try {
synchronized (getConnector()) {
xReplaceable = (XReplaceable) UnoRuntime.queryInterface( XReplaceable.class, _xcomponent );
_xtextdocument = (XTextDocument) UnoRuntime.queryInterface( XTextDocument.class, _xcomponent );
_xText = _xtextdocument.getText();
textCursor = _xText.createTextCursor();
XSearchDescriptor search = xReplaceable.createSearchDescriptor();
search.setSearchString( champ );
xTextRange = (XTextRange) UnoRuntime.queryInterface( XTextRange.class, xReplaceable.findFirst( search ) );
}
} catch (Exception ex) {
isc.util.log.LogUtil.getLogger().error( "Erreur", ex );
}
}
return new Object[] { xTextRange, textCursor };
}
Dernière modification par tomatoes le 17 févr. 2023 21:23, modifié 1 fois.
Libre office 24.2.6 sous Windows 10
-
- SuppOOrter
- Messages : 1047
- Inscription : 19 août 2018 05:20
Re: [Writer][Java] Insertion image dans un cadre ou tableau au milieu d'une chaîne de caractère
Bonsoir,
Joindre un fichier permet aussi de ne pas avoir à créer de toute pièce quelque chose qui n'irait pas.
Un passage par la recherche sur le forum et le suprême de code :
viewtopic.php?t=6357
Joindre un fichier permet aussi de ne pas avoir à créer de toute pièce quelque chose qui n'irait pas.
Un passage par la recherche sur le forum et le suprême de code :
viewtopic.php?t=6357
Open Office 4.1.15 sous Windows 11
-
- RespOOnsable modération
- Messages : 4117
- Inscription : 06 oct. 2008 08:03
Re: [Writer][Java] Insertion image dans un cadre ou tableau au milieu d'une chaîne de caractère
La balise [Writer] est réservée à du développement en Basic, comme tel n'est pas le cas, balise supprimé,
Cordialement
Cordialement
Pour tout savoir sur le fonctionnement de ce forum À lire avant tout !
-
- Membre OOrganisé
- Messages : 70
- Inscription : 31 mai 2010 11:58
Re: [Java] Insertion image dans un cadre ou tableau au milieu d'une chaîne de caractère
Avant de poster j'ai bien sûr cherché sur le forum (je connais cette page), j'ai cherché sur Internet, j'ai lu le livre de programmation et j'ai plusieurs jours de tests non concluants.
Voici le fichier que j'utilise pour les tests je cherche à insérer par exemple une image au niveau de <PROD1>, c'est une planche d'étiquette
Même problème si à l a place des cadres j'ai un tableau
Cordialement
Voici le fichier que j'utilise pour les tests je cherche à insérer par exemple une image au niveau de <PROD1>, c'est une planche d'étiquette
Même problème si à l a place des cadres j'ai un tableau
Cordialement
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre office 24.2.6 sous Windows 10
-
- SuppOOrter
- Messages : 1047
- Inscription : 19 août 2018 05:20
Re: [Java] Insertion image dans un cadre ou tableau au milieu d'une chaîne de caractère
Ce n'est pas indiqué dans votre premier message.
En Basic...
Code : Tout sélectionner
Sub Main
sURL = "c:\temp\logo.png"
ImageDansCadre("Cadre1", sURL)
End Sub
Sub ImageDansCadre(nomCadre, nomFichier)
sURL = convertToURL(nomFichier)
if not FileExists(sURL) then exit sub
oDoc = thisComponent
oCadre = oDoc.getTextFrames.getByName(nomCadre)
oTexte = oCadre.text
oCurseur = oTexte.createTextCursor
oImage = oDoc.createInstance("com.sun.star.text.GraphicObject")
With oImage
.GraphicURL = sURL
.AnchorType = com.sun.star.text.TextContentAnchorType.AS_CHARACTER
.Width = 2560
.Height = 2560
End With
oTexte.InsertTextContent(oCurseur, oImage, False)
End Sub
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Open Office 4.1.15 sous Windows 11
-
- Membre OOrganisé
- Messages : 70
- Inscription : 31 mai 2010 11:58
Re: [Java] Insertion image dans un cadre ou tableau au milieu d'une chaîne de caractère
merci déja pour ce code basic j'essaye de le convertir en Java mais pour l'instant cela ne fonctionne pas... je continue mes tests voici où j'en suis peut être que je fais fausse route. J'ai nommé dans ma planche d'étiquette mes cadres de Cadre1 à Cadre14
Code : Tout sélectionner
XComponentContext xComponentContext = getConnector().getXComponentContext();
XMultiComponentFactory xmcf = getConnector().getXMultiComponentFactory();
Object desktop = xmcf.createInstanceWithContext( "com.sun.star.frame.Desktop", xComponentContext );
com.sun.star.frame.XDesktop xDesktop = (com.sun.star.frame.XDesktop) UnoRuntime
.queryInterface( com.sun.star.frame.XDesktop.class, desktop );
XFramesSupplier xTablesSupplier = (XFramesSupplier) UnoRuntime.queryInterface( XFramesSupplier.class, desktop );
XFrames xNamedTables = xTablesSupplier.getFrames();
XFrame[] t = xNamedTables.queryFrames( 55 );
XFrame f = t[0].findFrame( "Cadre1", 55 );
Libre office 24.2.6 sous Windows 10
-
- Membre OOrganisé
- Messages : 70
- Inscription : 31 mai 2010 11:58
Re: [Java] Insertion image dans un cadre ou tableau au milieu d'une chaîne de caractère
j'y arrive toujours pas, c'est quoi l'équivalent du getTextFrames en Java ?
Libre office 24.2.6 sous Windows 10
-
- Membre OOrganisé
- Messages : 70
- Inscription : 31 mai 2010 11:58
Re: [Java] Insertion image dans un cadre ou tableau au milieu d'une chaîne de caractère
j'avance enfin
j'arrive à avoir un XTextFramesSupplier XTextFramesSupplier xtFrameSupplier
ensuite je fais un xtFrameSupplier.getTextFrames().getByName( "Cadre1" );
cela semble bien mes cadres car jusqu'à Cadre14 j'ai un objet mais pas Cadre15
j'ai un objet de type Any mais c'est quoi précisément comme type d'objet
j'arrive à avoir un XTextFramesSupplier XTextFramesSupplier xtFrameSupplier
ensuite je fais un xtFrameSupplier.getTextFrames().getByName( "Cadre1" );
cela semble bien mes cadres car jusqu'à Cadre14 j'ai un objet mais pas Cadre15
j'ai un objet de type Any mais c'est quoi précisément comme type d'objet
La modération vous a écrit: Merci de ne pas poster plusieurs messages à la suite !
Tant que vous n'avez pas reçu de nouvelle réponse, cela ne sert à rien et votre monologue rallonge inutilement la lecture du fil de discussion.
Si vous devez ajouter un complément d'information, le bouton "Modifié" (petit crayon) à la droite du message permet d'y remédier.
En attendant une prochaine réponse, vous pouvez participer également en répondant à d'autres questions sur notre forum.
Libre office 24.2.6 sous Windows 10
-
- PassiOOnné
- Messages : 639
- Inscription : 09 août 2017 22:15
Re: [Java] Insertion image dans un cadre ou tableau au milieu d'une chaîne de caractère
Hello,
Ami calmant, J.P
Avec les cadres du document ott que tu as mis en pièce jointe ? Ils semblent tous du même type.tomatoes a écrit : ↑20 févr. 2023 14:12 j'arrive à avoir un XTextFramesSupplier XTextFramesSupplier xtFrameSupplier
ensuite je fais un xtFrameSupplier.getTextFrames().getByName( "Cadre1" );
cela semble bien mes cadres car jusqu'à Cadre14 j'ai un objet mais pas Cadre15
j'ai un objet de type Any mais c'est quoi précisément comme type d'objet
Ami calmant, J.P
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
-
- Membre OOrganisé
- Messages : 70
- Inscription : 31 mai 2010 11:58
[Résolu][Java] Insertion image dans un cadre ou tableau au milieu d'une chaîne de caractère
oui c'est le fichier d'origine voici le nouveau
Désolé pour le monologue
Voici le code Java qui fonctionne
Merci pour votre aide
Désolé pour le monologue
Voici le code Java qui fonctionne
Code : Tout sélectionner
try {
synchronized (getConnector()) {
xReplaceable = (XReplaceable) UnoRuntime.queryInterface( XReplaceable.class, _xcomponent );
_xtextdocument = _xcomponent != null ? (XTextDocument) UnoRuntime.queryInterface( XTextDocument.class, _xcomponent ) : null;
if (_xtextdocument != null) {
XTextFramesSupplier xtFrameSupplier = (XTextFramesSupplier) UnoRuntime.queryInterface( XTextFramesSupplier.class,
_xcomponent );
XTextFrame xtf = (XTextFrame) UnoRuntime.queryInterface( XTextFrame.class,
xtFrameSupplier.getTextFrames().getByName( nomCadre ) );
xReplaceable = (XReplaceable) UnoRuntime.queryInterface( XReplaceable.class, _xcomponent );
XSearchDescriptor search = xReplaceable.createSearchDescriptor();
search.setSearchString( template );
XTextRange xTextRange = (XTextRange) UnoRuntime.queryInterface( XTextRange.class, xReplaceable.findFirst( search ) );
if (xTextRange != null) {
XMultiServiceFactory xMSF = (XMultiServiceFactory) UnoRuntime.queryInterface( XMultiServiceFactory.class,
_xtextdocument );
XTextContent xImage = (XTextContent) UnoRuntime.queryInterface( XTextContent.class,
xMSF.createInstance( "com.sun.star.text.TextGraphicObject" ) );
XPropertySet xProps = (XPropertySet) UnoRuntime.queryInterface( XPropertySet.class, xImage );
xProps.setPropertyValue( "GraphicURL", adresseFile );// Détermine l'URL concernant l'image (Format: file:///C:/temp/image.gif)
xProps.setPropertyValue( "Print", true );// Détermine si l'objet sera imprimé aussi lors de l'impression du doc.
xProps.setPropertyValue( "Width", (int) width );// Largeur de l'image
xProps.setPropertyValue( "Height", (int) height );// Hauteur de l'image
xProps.setPropertyValue( "AnchorType", com.sun.star.text.TextContentAnchorType.AS_CHARACTER );// Détermine l'ancrage à la page
xProps.setPropertyValue( "TextWrap", com.sun.star.text.WrapTextMode.THROUGHT );// Sans adaptation du texte pour l'image
xProps.setPropertyValue( "Opaque", false ); // En arrière plan
xtf.getText().insertTextContent( xTextRange, xImage, false );
}
}
}
} catch (Exception ex) {
isc.util.log.LogUtil.getLogger().error( "Erreur", ex );
}
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre office 24.2.6 sous Windows 10