[gelöst] Bilder per Makro auf Seitenbreite skalieren

Das Textverarbeitungsprogramm

Moderator: Moderatoren

dariuszmarek
*
Beiträge: 12
Registriert: Mi, 11.06.2008 16:09

[gelöst] Bilder per Makro auf Seitenbreite skalieren

Beitrag von dariuszmarek »

Hallo zusammen,

ich betreue unsere interne Firmen-Wiki. Daraus erstelle ich Dokumentationen.
Es läuft alles wunderbar, per Copy&Paste kann ich sehr lange Artikel in eine ott-Vorlage reinkopieren und (fast) alles ist schön so formatiert, wie ich es will.
Per Makro entferne ich z.B. auch "[bearbeiten]" Links aus dem Wiki

Es sind darunter auch Screenshots, die andere Kollegen in verschiedensten Auflösungen ins Wiki übertragen.

Per Copy&Paste werden die Grafiken 1:1 verknüpft, was über die Seitenbreite hinausgeht. Es sind auch kleinere Bildchen (z.B. Icons).

Richtig glüclich würde mich folgende Funktionalität (Makro) machen:

1. Bei eingebundenen oder verknüpften grafiken Grafiken (jpg, png, gif) schauen, ob das Bildchen breiter ist als 17cm.
2. Ist es kleiner - nichts tun (jene Icons oder kleinere Bilder die 1:1 aus dem Wiki kommen)
3. Ist es breiter - auf 17cm Breite proportional skalieren

Wäre seeeeehr dankbar, wer jemand eine Idee hätte, wie man das umsetzen könnte.

Danke und Gruß
Darius
Zuletzt geändert von dariuszmarek am So, 02.11.2008 16:39, insgesamt 1-mal geändert.
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Bilder automatisch per Makro auf Seitenbreite skalieren

Beitrag von turtle47 »

Hi Darius,

naja, bist relativ neu hier. Solche Fragen solltest Du besser in Rubrik "Basic und Java" hier im Forum reinstellen.

Veruche mal folgenden Code:

Code: Alles auswählen

Sub Image_Customize
	Dim size As New com.sun.star.awt.Size
	oDocument = thisComponent
	page = oDocument.drawPage
	nNumShapes = Page.getCount()
	k = 0
	For i = 0 To nNumShapes - 1
	oShape = Page.getByIndex( i )
	oImage = oShape.FrameStyleName
	if oImage = "Graphics" then
	CurWidth = oshape.Width
	CurHeight = oshape.Height
	if  CurWidth > 17000 Then
	Factor =  17000  / CurWidth
	NewWidth = CurWidth * Factor
	NewHeight= CurHeight * Factor
	size.Width = NewWidth
	size.Height = NewHeight	
	oshape.setSize(size)
	k = k + 1	
	end if
	end if
	next i
	msgbox "Es wurde(n) " & k & " Bild(er) angepasst." , 64, "Bildgrösse anpassen"
End Sub
Viel Erfolg.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
dariuszmarek
*
Beiträge: 12
Registriert: Mi, 11.06.2008 16:09

Re: Bilder automatisch per Makro auf Seitenbreite skalieren

Beitrag von dariuszmarek »

Hallo Jürgen,

sorry, ich werde mich bessern, ich habe es schlicht übersehen... (vielleicht kann man es dahin verschieben)
Und danke erstmal für Deine schnelle Hilfe.

Es läuft aber leider nicht wie erwünscht...

Ich bekommen zwar eine Meldung, dass 7 Bilder angepasst wurden - angepasst wurde keins.
Dann habe ich nachgezählt, wieviel solche Bilder über den Rand hinausgehen - es sind 15.....

Wo sitzt der Wurm?
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Bilder automatisch per Makro auf Seitenbreite skalieren

Beitrag von turtle47 »

Hmm, kannst Du bitte mal nachsehen ob die Grösse vielleicht schreibgeschützt ist.

Rechtsklick auf ein zu gosses Bild > Kontextmenue Bild... > Reiter Zusätze

Edit: Daran kann es nicht liegen wie ich selber getestet habe.
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
dariuszmarek
*
Beiträge: 12
Registriert: Mi, 11.06.2008 16:09

Re: Bilder automatisch per Makro auf Seitenbreite skalieren

Beitrag von dariuszmarek »

Komische Dinge passieren:
also - ich probiere es mal unter oo 3.0 auf einer Linux-Kiste (open Suse 10.3) - OO ist aus regulären Repos.

ES FUNKTIONIERT!!!!!
Nur: nehme ist Standard "Neu Dokument" unter Word, stelle ich fest, dass die Bilder automatisch von Wiki auf die Seitenbreite skaliert werden (ohne Dein Makro).

Ziehe ich es über den Rand und klicke auf Makro - es wird wunderbar wieder angepasst.


Mache ich das in meiner Wiki2Writer-Vorlage - werden die Bilder nicht automatisch skaliert, dein Makro funktioniert auch nicht.

Wo sitz diesmal der Wurm?

Dein Skript ist 100% in Ordnung. Danke schöööön!
Die Bilder sind natürlich nicht geschütz. ich probiere noch rum und berichte....

OOOH - bin ich dooooof!
Es funktioniert wunderbar - ich habe aus Versehen eine alte Vorlage genommen. Da waren die Ränder 2cm links und 3 cm rechts, kein Wunder, dass Bilder mit 17 cm Breite mit 1 cm über den Rand rechts rausguckten....


Komischerweise stelle ich fest, dass die Grafiken unter OO 3.0 auf Linux ohne weiteres auf die Seitenbreite skaliert werden.
Ich schaue mal auf dem Firmen-Windows-Notebook nach....

Also Problem gelöst. Danke!!!!!!!!!!!!!!!!!!!!!!!!!!
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: [gelöst] Bilder per Makro auf Seitenbreite skalieren

Beitrag von turtle47 »

Hallo Darius,
dariuszmarek hat geschrieben:Da waren die Ränder 2cm links und 3 cm rechts, kein Wunder, dass Bilder mit 17 cm Breite mit 1 cm über den Rand rechts rausguckten....[/[uote]
Folgender Code berücksichtigt die Seiteneinstellungen für die Bildgrösse: :lol:

Code: Alles auswählen

Sub Image_Customize_2
	Dim size As New com.sun.star.awt.Size
	oDocument = thisComponent
	page = oDocument.drawPage
	MyPageStyle = oDocument.createInstance( "com.sun.star.style.PageStyle")
	PageWidth = MyPageStyle.width
	L_Margin = MyPageStyle.LeftMargin
	R_Margin = MyPageStyle.RightMargin
	UsedWidth = PageWidth - L_Margin - R_Margin
	nNumShapes = Page.getCount()
	k = 0
	For i = 0 To nNumShapes - 1
	oShape = Page.getByIndex( i )
	oImage = oShape.FrameStyleName
	if oImage = "Graphics" then
	CurWidth = oshape.Width
	CurHeight = oshape.Height
	if  CurWidth > UsedWidth Then
	Factor =  UsedWidth  / CurWidth
	NewWidth = CurWidth * Factor
	NewHeight= CurHeight * Factor
	size.Width = NewWidth
	size.Height = NewHeight	
	oshape.setSize(size)
	k = k + 1	
	end if
	end if
	next i
	msgbox "Es wurde(n) " & k & " Bild(er) angepasst." , 64, "Bildgrösse anpassen"
End Sub[
Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
dariuszmarek
*
Beiträge: 12
Registriert: Mi, 11.06.2008 16:09

Re: [gelöst] Bilder per Makro auf Seitenbreite skalieren

Beitrag von dariuszmarek »

Danke! Danke! Danke!
Einfach Klasse! Ich wollte nicht unverschämt sein... der 2. Skript ist einfach Klasse, passt die Bilder so an, egal, wie Ränder definiert sind, das kann ich in jeder Vorlage nutzen, egal wie sie formatiert ist....

Komische Bemerkung:
Unter OO-Windows werden die Bilder an die Seitenbreite nicht automatisch angepasst - aber der 2. Skript richtet es schon...
Ist da irgendwo eine Einstellung dafür?


Und noch etwas in diesem Bereich...
@Jürgen
Liesse sich so etwas auch für Tabellen einrichten?
Das Problem ist - Kollegen formatieren im Wiki Tabellen mit fester Pixelbreite.
Dann muss ich sie im Writer markieren, und "relative" Breite definieren, dann passen sie sich automatisch der Seite an...

Also: Makro soll prüfen, ob eine Tabelle relative Breite hat, wenn nicht "relativ setzen".

Danke im voraus und Gruß
Darius
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: [gelöst] Bilder per Makro auf Seitenbreite skalieren

Beitrag von turtle47 »

dariuszmarek hat geschrieben:dann passen sie sich automatisch der Seite an...
???
dariuszmarek hat geschrieben:Also: Makro soll prüfen, ob eine Tabelle relative Breite hat, wenn nicht "relativ setzen".
Also bei mir kommt dann z.B. 83%. Soll das so bleiben, oder willst Du die Tabelle auf 100% setzen?
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
dariuszmarek
*
Beiträge: 12
Registriert: Mi, 11.06.2008 16:09

Re: [gelöst] Bilder per Makro auf Seitenbreite skalieren

Beitrag von dariuszmarek »

Ach so, eigentlich dasselbe Prinzip wie vorher, d.h.
die Tabellen sollen 100% der A4 Seite (zwischen Rändern versteht sich) befüllen.

Es kommt aber vor, dass eine Tabelle sehr klein sein kann, dann soll man sie nicht künstlich auf 100% ausblähen, dann sollen sie so bleiben, nur die, die nach dem Einfügen über den rechten Rand rausgucken.
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: [gelöst] Bilder per Makro auf Seitenbreite skalieren

Beitrag von turtle47 »

dariuszmarek hat geschrieben:Es kommt aber vor, dass eine Tabelle sehr klein sein kann, dann soll man sie nicht künstlich auf 100% ausblähen, dann sollen sie so bleiben, nur die, die nach dem Einfügen über den rechten Rand rausgucken
Folgendes Makro erledigt diesen Job für Dich:

Code: Alles auswählen

Sub Table_RelativeWidth_100
   Dim oTable As Object
   Dim tabs()
   oDoc = ThisComponent
   oTables = oDoc.GetTextTables()
   Anzahl = oTables.getcount
   page = oDoc.drawPage
   MyPageStyle = oDoc.createInstance( "com.sun.star.style.PageStyle")
   PageWidth = MyPageStyle.width
   L_Margin = MyPageStyle.LeftMargin
   R_Margin = MyPageStyle.RightMargin
   UsedWidth = PageWidth - L_Margin - R_Margin
   nNumShapes = Page.getCount()
   for i = 0 to Anzahl -1   
   oTable = odoc.texttables(i)
   Table_Width = otable.Width
   if Table_Width > UsedWidth then
   oTable.RelativeWidth = 100
   oTable.RightMargin = 0
   end if
   next i
End Sub
Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Antworten