Automatisierter Export von Formeln aus OOo Writer

380
Spook

Ich schreibe regelmäßig Artikel in Zeitungen, aber da Formeln nicht oft dort erscheinen, haben sie keine Möglichkeit, sie zu verarbeiten, und ich muss sie als Bilder zur Verfügung stellen.

Ich habe einen Artikel geschrieben, der ungefähr 50 nummerierte Formeln und eine Anzahl von Formeln enthält, die in den Text eingebettet sind. Ich kann auf keinen Fall alle Screenshots machen, das wird Wahnsinn sein.

Gibt es eine Möglichkeit, den folgenden Prozess (oder zumindest seine Teile) zu automatisieren:

  • Extrahieren Sie alle Formeln aus dem OOo-Dokument (ich brauche keine Nummerierung, die Formeln selbst werden ausreichen)
  • Rendern mit angegebener DPI oder Größe?

Der verzweifelte Plan wäre, die ZIP-Datei manuell zu dekomprimieren und in XML-Dateien zu graben, aber ich hoffe, dass es auch nicht dazu kommen wird.

0

1 Antwort auf die Frage

0
Jim K

Die Math-Komponente exportiert Bilder nicht einfach. Kopieren und fügen Sie sie stattdessen in LibreOffice Draw ein und exportieren Sie von dort aus eine PNG-Datei.

Hier ist ein Code zum Auflisten der Math-Formelobjekte.

Sub ExportFormulasAsImages oDoc = ThisComponent oEmbed = oDoc.getEmbeddedObjects() filenum = 0 For i = 0 To oEmbed.getCount() - 1 oObj = oEmbed.getByIndex(i) If oObj.supportsService("com.sun.star.text.TextEmbeddedObject") Then If oObj.CLSID = "078B7ABA-54FC-457F-8551-6147e776a997" Then oFormulaDoc = oObj.getEmbeddedObject().Parent oDrawPage = oFormulaDoc.DrawPage(0) filenum = filenum + 1 sURL = "file:///path/formula" & Format(filenum, "00") & ".jpg" End If End If Next MsgBox "Exported " & filenum & " formulas as images." End Sub 

Beispielcode für das Kopieren in Draw und das Exportieren finden Sie unter https://ask.libreoffice.org/de/question/141898/macro-for-saving-sheet-as-single-image-in-calc/ .

Ich habe es Ihnen überlassen, genau zu bestimmen, wie Sie den Code schreiben, aber Sie können auf StackOverflow oder ask.libreoffice.org posten, wenn Sie nicht weiterkommen. Veröffentlichen Sie den Code, den Sie bisher ausprobiert haben.

BEARBEITEN :

Ein guter Ort, um LibreOffice-Makros kennen zu lernen, ist http://www.pitonyak.org/oo.php .

Verwenden Sie ein Introspektions-Tool wie MRI oder XrayTool, um herauszufinden, was Objekte tun können .

Ignorieren Sie bei den API-Dokumenten das SwX-Präfix beim Schreiben von Makros. Diese Dokumente sind hilfreich, wenn sie zusammen mit einem Introspektions-Tool verwendet werden. Allein genommen sind sie aufgrund der Vererbungsstruktur schwer zu lesen.

Die Aufnahme ist keine gute Methode, um das Schreiben von Makros zu lernen. Es ist jedoch nützlich für bestimmte Dispatcher-Vorgänge wie Kopieren / Einfügen. Dazu aktivieren experimentelle Funktionen in Extras -> Optionen -> Erweitert . In LO 6 gibt es ein spezielles Kontrollkästchen Makroaufnahme aktivieren . Dann Extras -> Makros -> Makro aufnehmen .

Zu beachten ist noch Folgendes: Für ernsthafte Arbeit ist Python-UNO in der Regel eine bessere Methode zum Schreiben von Makros, beispielsweise aufgrund von Datenstrukturen, regulären Ausdrücken und der Dateibehandlung. (C ++ ist möglich, aber für die meisten Makros nicht so gut. Java ist eine gute Wahl und hält sich eng an die UNO-API, macht jedoch einige Dinge schwieriger als nötig.)

Danke für die Antwort. Ich würde es gerne weiterentwickeln, aber ich habe keine Dokumentation für LibreOffice-Makros gefunden. Das, das ich gefunden habe, https://api.libreoffice.org/docs/idl/ref/index.html, erwähnt beispielsweise nicht SwXTextEmbeddedObject. Ich habe auch keine Option zum Aufzeichnen von Makros gefunden, so dass ich einen Blick darauf werfen könnte, wenn ich etwas finde. Meine aktuelle Idee ist, Draw innerhalb von Writer zu starten, die Formel dort einzubetten und zu versuchen, die Zeichnung in eine png-Datei zu exportieren. Spook vor 6 Jahren 0
Außerdem fehlt dem Code-Editor von LibreOffice die Autovervollständigung, sodass ich nicht einmal ahnen kann, was ich mit den Objekten im Skript machen kann. Spook vor 6 Jahren 0
@Spook: Siehe die bearbeitete Antwort für einige Tipps. Jim K vor 6 Jahren 0