🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Workaround: Grafiken als Text verankern

WRITER hat alles, was Sie von einer modernen, voll ausgestatteten Textverarbeitung erwarten.
Antworten
devdol
Beiträge: 45
Registriert: Fr 11. Mär 2011, 17:59

Workaround: Grafiken als Text verankern

Beitrag von devdol » Fr 24. Aug 2012, 18:25

Es ist in OpenOffice und LibreOffice (offenbar seit Jahren schon und auch bei der aktuellen 3.5.4.2) unmöglich, die Formatvorlage "Grafik" und ggf. die Dokumentvorlage so einzustellen, daß Grafiken standardmäßig immer "als Zeichen" statt "am Absatz" verankert werden. Dies ist zwar eine althergebrachte, aber nach wie vor in vielen Fällen die robusteste Verankerungsweise.

Eine mögicher "Workaround" ist, sich folgendes Makro anzulegen:

Code: Alles auswählen

sub GrafikAlsZeichen
  dim document, dispatcher as object
  document   = ThisComponent.CurrentController.Frame
  dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
  dispatcher.executeDispatch(document, ".uno:SetAnchorToChar", "", 0, Array())
end sub
und per Extras/Anpassen mit einem frei wählbaren Tastenkürzel versehen, z.B. "Strg+Shift+Z". Mit dieser kann die Verankerung "als Zeichen" dann für jede Grafik per Shortcut korrigiert werden, nachdem man die Grafik markierthat. Das geht zumindest ein wenig schneller als wiederholte Hangeleien durch Kontextmenüs.

Zwar habe ich eben wieder durch alle deutsch- und englischsprachigen Foren zu dieser Thematik durchforstet, doch alle vorgeschlagenen Wege (zumeist das manuelle Formatieren einer Grafik auf "Verankerung als Zeichen", Markieren dieser Grafik und danach im Vorlagenfenster rechts oben "Vorlagen aktualisieren") funktionieren nicht. Es läßt sich nicht einmal die Formatvorlage "Grafik" im aktuellen Dokument diesbezüglich "aktualisieren", somit entfällt auch das permanente Einrichten in einer Dokumentvorlage. Dasselbe gilt für die Formatvorlage "Rahmen".

[Eine nicht überprüfte, aber naheliegende Vermutung: "Vorlagen aktualisieren" aktualisiert nur die Attribute, die auch über den "Ändern"-Dialog der Formatvorlagen zugänglich sind - also eben leider nicht der Verankerungsmodus].

Sollte wider erwarten jemand mit einer aktuellen Version von LibreOffice doch einen Weg gefunden haben, bitte hier veröffentlichen!

devdol
Beiträge: 45
Registriert: Fr 11. Mär 2011, 17:59

Re: Workaround: Grafiken als Text verankern

Beitrag von devdol » Di 14. Jul 2015, 11:30

Bei Bedarf funktioniert (getestet mit LibreOffice 4.4.4.3 unter Linux) auch folgende Voreinstellungs-Lösung:

* Die Dokumentvorlage "meinevorlage.odt" aus dem Vorlagenverzeichnis (unter Linux ~/.config/libreoffice/4/user/template/) in ein Temporärverzeichnis kopieren
* umbenennen in "meinevorlage.zip" und in einen Unterordner entpacken
* Die enthaltene Datei styles.xml mit einem geeigneten Editor, der lange Zeilen nicht zwangsweise umbricht, (jedit, gedit...) öffnen
* Die Stelle 'name="Graphics" ' suchen
* Kurz dahinter sollte 'text:anchor-type="paragraph"' folgen. Dort ersetze man 'paragraph' durch 'as-char'.
* Datei speichern und Editor schließen
* Den kompletten vorher entpackten Verzeichnisbaum in ein neues ZIP zu packen und nach ".odt" umzubenenen führt leider zu einen unbrauchbaren Ergebnis, da OpenDocument-Dateien offenbar noch eine "zusätzliche Magie" benötigen (Kennt sie jemand? Bitte ergänzen!)
Was jedoch bereits ausreicht und zu einer weiterhin funktionalen Vorlagendatei mit der gewünschten Änderung führt, ist das bloße Aktualisieren der einzgen geänderten Datei, z.B. von der Kommanozeile aus mit:
zip -u meinevorlage.zip styles.xml
* Abschließend benennt "meinevorlage.zip" wieder in "meinevorlage.odt" zurück und ersetzt damit die (vorher gesicherte) Version im Vorlagenordner.
Startet man nun LibreOffice neu, werden in neuen Dokumenten Grafiken aus der Zwischenablage immer "als Zeichen" eingefügt, was oftmals die rationellere Formatierung ermöglicht.

Bei Bedarf ließe sich der Vorgang des Patchens einer Vorlagendatei auch mit einem Shellskript automatisieren, wobei auf der bash
sed 's/text:anchor-type=\"paragraph\"/text:anchor-type=\"as-char\"/'
dann den Kern des Ganzen darstellen könnte.

Der Dank für diesen Lösungsweg gebührt übrigens A.Marsan (http://nabble.documentfoundation.org/im ... 14581.html). Solange uns die Entwickler keine Möglichkeit geben, das über die dafür eigentlich üblichen Wege zu konfigurieren (Editieren der Vorlagendatei oder eine Option unter Extras/Optionen...) dürfte das noch die brauchbarste Selbsthilfe sein.

musikai
Beiträge: 263
Registriert: Do 14. Mai 2015, 17:53

Re: Workaround: Grafiken als Text verankern

Beitrag von musikai » Do 16. Jul 2015, 01:11

Hast Dich ja selbst beantwortet :-)

Solltest Du öfters die Eigenschaften mehrer Bilder nachträglich in deinen Dokumenten ändern wollen, dann lohnt sich vielleicht ein Blick auf das PicTool (-Macro), das Teil der Macro-Suite des LibreOfficeSongbookArchitect-Projektes ist. http://www.libreoffice-forum.de/viewtop ... 997#p36359

Ich hätte es gerne auch als extension angeboten, allerdings gelingt mir das nur für OpenOffice, für LibreOffice meckert der installer.

Du könntest auch Dein Macro so anpassen, dass alle Bilder geändert werden (wenn kein Bild ausgewählt) oder nur das ausgewählte:
sub AlleGrafikenAlsZeichen
Dim go,g,i
g = ThisComponent.CurrentSelection(0)
if g.supportsService("com.sun.star.text.TextGraphicObject")=false then 'wenn kein Bild ausgewählt, dann alle Bilder ändern.
go = ThisComponent.getGraphicObjects
For i = 0 to go.Count-1
g = go.getByIndex(i)
g.AnchorType = com.sun.star.text.TextContentAnchorType.AS_CHARACTER
Next
else
g.AnchorType = com.sun.star.text.TextContentAnchorType.AS_CHARACTER 'selektiertes Bild ändern
end if
End Sub
Win7 Pro, Sibelius 7.1.3, Lubuntu 15.10, LibO 4.4.7, OO 4.1.3
Free Project: LibreOffice Songbook Architect (LOSA)
http://struckkai.blogspot.de/2015/04/li ... itect.html

musikai
Beiträge: 263
Registriert: Do 14. Mai 2015, 17:53

Re: Workaround: Grafiken als Text verankern

Beitrag von musikai » Mo 25. Jan 2016, 21:59

Für zukünftige Probleme dieser Art gibt es die PicTool-Erweiterung:
http://extensions.libreoffice.org/exten ... er-pictool
Win7 Pro, Sibelius 7.1.3, Lubuntu 15.10, LibO 4.4.7, OO 4.1.3
Free Project: LibreOffice Songbook Architect (LOSA)
http://struckkai.blogspot.de/2015/04/li ... itect.html

devdol
Beiträge: 45
Registriert: Fr 11. Mär 2011, 17:59

Re: Workaround: Grafiken als Text verankern

Beitrag von devdol » Di 16. Feb 2016, 16:58

Wir schreiben das Jahr 2016, verwenden die Version LO 5.0.4 und können's immer noch nicht konfigurieren.
Und die PicTool-Extension ist sicher etwas Feines, scheint aber dieses grundlegende Problem (das Standardverhalten von Writer nicht ändern zu können) auch nicht zu lösen (zumindest hat sich mir dann nicht erschlossen wie).

Der nachfolgende Entwurf eines Python-Skripts erspart einem wenigstens das händische Pfriemeln und ändert die in einer Vorlagendatei (*.ott) vorhandene Grafik-Vorlage (bzw. fügt, falls nicht vorhanden, eine solche ein), die sich leider immer noch nicht an der dafür zuständigen Stelle (Format/Formatvorlagen -> Rahmenvorlage:Grafik:Typ) einstellen läßt. Die Optionsgruppe "Verankerung", wie sie rechts oben im "Bild formatieren..."-Kontextmenü vorhanden ist, fehlt hier nämlich einfach.

Code: Alles auswählen

#!/usr/bin/python2
# coding: utf-8
# This script replaces an arbitraty graphics style by a style that embeds graphics 
# anchored "as-character" (or inserts that style, if missing, to override the built-in anchor-type="paragraph")
# Thanks to: https://forum.openoffice.org/en/forum/viewtopic.php?p=211302#p211302
###########################################################################
DEFAULT_GRAPHICS_STYLE='<style:style style:name="Graphics" style:family="graphic"><style:graphic-properties svg:width="10.00cm" fo:min-height="0.1cm" text:anchor-type="as-char" svg:x="1.50cm" svg:y="-1.50cm" style:wrap="none" style:vertical-pos="top" style:vertical-rel="baseline" style:horizontal-pos="center" style:horizontal-rel="paragraph"/></style:style>'
###########################################################################
import os, sys, re, zipfile, tempfile

def show_usage(fn):
	print fn, "not found"
	print "Usage:",sys.argv[0], "an_open_text_template.ott"

def updateZip(zipname, filename, content):
    tmpfd, tmpname = tempfile.mkstemp(dir=os.path.dirname(zipname))
    os.close(tmpfd)
    with zipfile.ZipFile(zipname, 'r') as zin:
        with zipfile.ZipFile(tmpname, 'w') as zout:
            zout.comment = zin.comment # preserve the comment
            for item in zin.infolist():
                if not item.filename = filename:
                    zout.writestr(item, zin.read(item.filename))
    os.remove(zipname)
    os.rename(tmpname, zipname)
    with zipfile.ZipFile(zipname, mode='a', compression=zipfile.ZIP_DEFLATED) as zf:
        zf.writestr(filename, content)


mydir = sys.path[0]
os.chdir(mydir)
ottName = sys.argv[1]
if not os.path.isfile(ottName):
	show_usage(ottName)
	sys.exit(1)
myOTT = zipfile.ZipFile(ottName)
content = myOTT.read('styles.xml')
content = str(content.decode(encoding='utf8'))
# pattern group \3 is replaced by the default graphics style with character anchoring:
newcontent = re.sub('(.*?)(\<style:style style:name="Index".*?\</style:style\>)(.*?)(<text:outline-style.style:name="Outline".*)', r'\1\2§§§§§§§§\4', content, flags=re.DOTALL)
newcontent = newcontent.replace('§§§§§§§§',DEFAULT_GRAPHICS_STYLE)
updateZip(ottName, 'styles.xml', newcontent)
Das Skript einfach ins Vorlagenverzeichnis (unter Linux typischerweise ~/.config/libreoffice/4/user/template/ ) kopieren und mit der gewünschten Vorlagendatei als Argument aufrufen.

Es wäre schön, wenn jemand mit mehr Insiderwissen noch die einzelnen Parameter "pflegen" könnte - mir ist nicht klar, ob man einige davon (zumindest "svg:width" bis "style:wrap") auch weglassen darf, ohne die Stabilität des Programms mit dieser gepatchten Standardvorlage zu gefährden. (An sich sollten ja dann die im Programm fest eingebauten Standardwerte gelten.)

franc
Beiträge: 12
Registriert: Do 12. Aug 2021, 18:32

Re: Workaround: Grafiken als Text verankern

Beitrag von franc » Sa 14. Aug 2021, 15:44

Jetzt schreiben wir das Jahr 2021 und es gibt LO 7.1.5.2 und es geht immer noch nicht?
Oder ich finde es nur nicht (das wäre viel wahrscheinlicher).

Gibt es ohne Makro wenigstens die Möglichkeit auf einen Schlag alle Bilder eines Dokuments als Zeichen zu verankern?

Ich komme mit der Standardeinstellung (Verankerung am Zeichen) einfach nicht zurecht. Am liebsten würde ich Bilder millimetergenau mit der Tastatur (oder notfalls Maus) positionieren, aber das geht ja überhaupt nicht, so was macht wohl nur ein Grafikprogramm einigermaßen benutzbar ohne große Überraschungen.

Benutzeravatar
miesepeter
* LO-Experte *
Beiträge: 2140
Registriert: So 19. Dez 2010, 18:16
Wohnort: Bayern

Re: Workaround: Grafiken als Text verankern

Beitrag von miesepeter » So 15. Aug 2021, 09:33

franc hat geschrieben:
Sa 14. Aug 2021, 15:44
LO 7.1.5.2...

Gibt es ohne Makro wenigstens die Möglichkeit auf einen Schlag alle Bilder eines Dokuments als Zeichen zu verankern?

Ich komme mit der Standardeinstellung (Verankerung am Zeichen) einfach nicht zurecht.
Hallo,
beim Einfügen von Bildern kann man jetzt (Version 7.1.x) die Vorgabe "Verankerung als Zeichen" wählen.
Siehe: Default anchor for newly added images can be set per Tools ▸ Options ▸ LibreOffice Writer ▸ Formatting Aids

Makro zur Umankerung: Kenne ich nicht, vllt. gibt's dazu eine Erweiterung (Extension)? Hier würde ich die Frage noch einmal separat stellen (im Unterforum Programmierung). - Viel Erfolg!

PS: Bitte keine Uraltfragen aufgreifen. Einfach neues Thema eröffnen und Fragen nicht kombinieren. Danke.

franc
Beiträge: 12
Registriert: Do 12. Aug 2021, 18:32

Re: Workaround: Grafiken als Text verankern

Beitrag von franc » Mo 16. Aug 2021, 12:08

Vielen Dank!
Ich hab LO jetzt auch auf meim Mac installiert (OS 10.11.6) da muss ich dann in die Experteneinstellungen rein um das zu setzen (ein Hoch auf diese Experteneinstellungen!), nämlich dort:

(Menü) LibreOffice > Preferences > LibreOffice > Advanced > 'Open Expert Configuration' > Anchor 'Search' > org.openoffice.Office.Writer > Content > Display > DefaultAnchor = 2

Siehe aus Bugzilla den Kommentar von Cor Nouws 2020-12-26 22:05:00 UTC:
https://bugs.documentfoundation.org/sho ... =99646#c21

Wanderer
* LO-Experte *
Beiträge: 909
Registriert: Di 11. Feb 2014, 20:03
Wohnort: Berlin

Re: Workaround: Grafiken als Text verankern

Beitrag von Wanderer » Mo 16. Aug 2021, 17:02

Und etwas tiefer steht dort:
Why send users to the expert settings? The default anchor is exposed as dropdown under Tools > Options > LibO Writer > Formatting Aids > Image: Anchor
wie oben schon von Miesepeter angegeben...

Mfg, Jörn
LO 6.0.7 (32Bit) Win8.1 Pro 32 Bit/ LO 6.3.2 Win10 64Bit / LO 6.0.7 Win7 Pro 64 Bit

franc
Beiträge: 12
Registriert: Do 12. Aug 2021, 18:32

Re: Workaround: Grafiken als Text verankern

Beitrag von franc » Mo 16. Aug 2021, 17:38

Die Einstellung gibt es halt beim Mac leider nicht :(
Der Einstellungsdialog schaut dort so aus, kein Unterpunkt Writer:
Bildschirmfoto 2021-08-16 um 17.39.55.png
Bildschirmfoto 2021-08-16 um 17.39.55.png (142.68 KiB) 3856 mal betrachtet


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten