-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 El 2009-05-29 a las 20:53 +0200, Camaleón escribió:
Esta macro es un copia/pega que he visto por ahí, buscando en Google. Funcionar funciona, al menos en el OOo writer 2.6, pero hay que ir seleccionando una imagen cada vez y ejecutar la macro sobre ella :-/
*** Sub ResizeEmbeddedPictureInWriter
oDesktop = createUnoService("com.sun.star.frame.Desktop") oDocument = ThisComponent oSelection = oDocument.CurrentSelection
If oSelection.ImplementationName <> "SwXTextGraphicObject" Then MsgBox "Select image first..." Exit Sub End If
nFactor = 25 If Not(IsNumeric(nFactor)) Then Exit Sub nFactor = Val(nFactor)/100 Dim oSize as new com.sun.star.awt.Size oSize.Width = Int(oSelection.Width * nFactor) oSize.Height = Int(oSelection.Height * nFactor) oSelection.setSize(oSize)
End Sub ***
Hay más. Resulta que en el diálogo de propiedades de imágen del oowriter, la propiedad tamaño "relativo" no se refiere a relativo al tamaño original de la foto, sino ¡al tamaño de la hoja! Por tanto, cuando pongo, por ejemplo, que quiero un ancho relativo de 25% y un alto relativo de 25%, no obtengo una foto a 1/4 de la foto original, sino a un cuarto de la hoja mia. O sea, que tengo todos los tamaños mal en el oowriter :-/ La solución fácil sería una macro que ponga el tamaño de la foto al tamaño original, y luego ejecutar la macro de arriba - eso daría un resultado correcto. ¡El problema es que no soy capaz de grabar una macro que restituya el tamaño original! He grabado la macro varias veces, pero no hace nada. Por lo visto, el grabar una macro que repita lo que haces, es complicadísimo. Si grabas una, y quieres repetir, la segunda vez no te pregunta el nombre de la macro, y no graba la segunda: hay que posicionar el organizador de macros con el cursor encima de ninguna macro, no de la antigua - la prueba es que borré el interior de la macro y al grabar seguía en blanco. Y encima, cuando graba, no graba nada que tenga sentido. Esto es lo que me ha grabado (el nombre de mi macro es Main (porque tengo la costumbre de reescribirla, y ese nombre lo tengo asignado a un botón desde hace mucho tiempo): 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(7) as new com.sun.star.beans.PropertyValue args1(0).Name = "LeftRightMargin.LeftMargin" args1(0).Value = 199 args1(1).Name = "LeftRightMargin.TextLeftMargin" args1(1).Value = 199 args1(2).Name = "LeftRightMargin.RightMargin" args1(2).Value = 199 args1(3).Name = "LeftRightMargin.LeftRelMargin" args1(3).Value = 100 args1(4).Name = "LeftRightMargin.RightRelMargin" args1(4).Value = 100 args1(5).Name = "LeftRightMargin.FirstLineIndent" args1(5).Value = 0 args1(6).Name = "LeftRightMargin.FirstLineRelIdent" args1(6).Value = 100 args1(7).Name = "LeftRightMargin.AutoFirst" args1(7).Value = false dispatcher.executeDispatch(document, ".uno:LeftRightMargin", "", 0, args1()) rem ---------------------------------------------------------------------- dim args2(3) as new com.sun.star.beans.PropertyValue args2(0).Name = "TopBottomMargin.TopMargin" args2(0).Value = 199 args2(1).Name = "TopBottomMargin.BottomMargin" args2(1).Value = 199 args2(2).Name = "TopBottomMargin.TopRelMargin" args2(2).Value = 100 args2(3).Name = "TopBottomMargin.BottomRelMargin" args2(3).Value = 100 dispatcher.executeDispatch(document, ".uno:TopBottomMargin", "", 0, args2()) end sub parece que lo que me ha grabado son los margenes de la foto. Otra solución sería editar la macro ResizeEmbeddedPictureInWriter y hacer un oSelection.setSize() al tamaño original, que no sé como saber que variable lo contiene. [...] Vale, ya lo he conseguido, es esto: Sub ResizeEmbeddedPictureInWriter oDesktop = createUnoService("com.sun.star.frame.Desktop") oDocument = ThisComponent oSelection = oDocument.CurrentSelection If oSelection.ImplementationName <> "SwXTextGraphicObject" Then MsgBox "Select image first..." Exit Sub End If nFactor = 40 If Not(IsNumeric(nFactor)) Then Exit Sub nFactor = Val(nFactor)/100 Dim oSize as new com.sun.star.awt.Size rem reset to original size oSize.Width = Int(oSelection.ActualSize.Width) oSize.Height = Int(oSelection.ActualSize.Height) oSelection.setSize(oSize) rem resize by nFactor oSize.Width = Int(oSelection.Width * nFactor) oSize.Height = Int(oSelection.Height * nFactor) oSelection.setSize(oSize) End Sub Tengo puesto el botón en un tollbar flotante en la esquina inferior izquierta, al lado del botón de la parte inferior de la barra de desplazamiento vertical, puesta para buscar la siguiente foto. Así con dos clicks voy cambiando cada foto al tamaño que busco. ¡Eso ya funciona! - -- Saludos Carlos E. R. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (GNU/Linux) iEYEARECAAYFAkohkhMACgkQtTMYHG2NR9XWcgCfbEUNcs+k3okq3ES7dhlNoMVm RjsAniW9wnV322r3cTVNwjarlLiy8Ahb =+rm6 -----END PGP SIGNATURE-----