Wie ändere ich einen QR-Code per Makro?

Neu in LibreOffice 6.4 war, dass ein Struct für einen Barcode dabei ist. Ich erzeuge hier zuerst über Einfügen → Object → QR- und Barcode einen QRCode. Anschließend benenne ich unter “Zeichnungsobjeke” das Object mit ‘QRCode’.

Mit dem folgenden Makro schaffe ich es, neuen Inhalt für den Code zu erzeugen:

SUB QRCode_aendern
	oDraw = ThisComponent.DrawPage
	FOR i = 0 TO oDraw.count - 1
		IF oDraw.getByIndex(i).Name = "QRCode" THEN
			unoBarcode = createUnoStruct("com.sun.star.drawing.BarCode")
			unoBarcode.Type = 0  
     		unoBarcode.Payload = "https://de.libreoffice.org"
     		unoBarcode.ErrorCorrection = 2
     		unoBarcode.Border = 1
			oDraw.getByIndex(i).BarCodeProperties = unoBarcode
			oDocControl = ThisComponent.CurrentController
			oDocControl.select(oDraw.getByIndex(i))
			oDocFrame   = oDocControl.Frame
			oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
			oDispatcher.executeDispatch(oDocFrame, ".uno:EditQrCode", "", 0, Array())
		END IF
	NEXT
END SUB

Leider verändert sich nicht das Erscheinungsbild des QR-Codes. Deshalb muss ich den Code auswählen, den QR- und Bacode Dialog starten und dann mit OK bestätigen. Nicht schön, weil natürlich mit Benutzereingabe …

Ich habe bisher nach so etwas wie refresh() oder reload() gesucht, aber nicht gefunden. Kann sein, dass so etwas zur Zeit mit dem eingebuten QRCode-Generator nicht möglich ist: Bug 128779. Siehe auch: Users-Mailingliste September 2020, QR-Code per Makro…

Und wie so oft: Ich brauche das nicht selbst, ich hätte das nur gerne für das Base-Handbuch als Feld in einem Serienbrief, das dann eben über die Datenbank mit Inhalt versorgt werden kann.

Gruß

Robert

Hallo Robert,

das Thema QR-Code liegt wohl auf Eis :frowning:
Seitens der Entwickler eine gute Idee, aber nicht zu Ende gedacht (programmiert).
Anfänglich war auch die Kodierung falsch, d.h. generierte Grafiken konnten nicht mit externen Tools ausgelesen werden.
Ich habe dies u.a. mit diesem Tool getestet:

Dieser Fehler wurde behoben, aber eine Programmierung per API-Anweisungen und Dispatcher ist noch immer nur bedingt möglich.
Ein weiteres Manko ist, dass nur einzeilge Informationen kodiert werden.
Ein nicht funktionierendes Beispiel:

unoBarcode.Payload = "https://de.libreoffice.org" & Chr(10) & "Vorname" & Chr(10) & "Nachname"

Sollte so nach dem Generieren ausgelesen werden können:

https://de.libreoffice.org
Vorname
Nachname

Dies ist nicht möglich :frowning:

Ich lasse mich mal überaschen, wann sich etwas ändert…

Bisher war für mich die einzige überzeugende Lösung innerhalb von LibreOffice die Variante, die @Villeroy in diesem Thread nutzt: Apache OpenOffice Community Forum - Printing QR codes out of database - (View topic)
.
Aber auch hier hast Du keine Refresh-Methode im qr-Code, auch wenn es natürlich möglich ist alle/einzelne qr-Codes neu zu generieren.

Scheint dann wohl noch nicht so gut integriert zu sein, wie es sollte. Eigentlich müsste ich ja nur das Auslösen des “OK”-Buttons über Makro simulieren. Ich möchte nicht mit dem Base-Handbuch Lösungen präsentieren, die erst einmal noch das zusätzliche Installieren von Extensions beinhalten.

Wenn ich das selbst benötigen würde, dann wüdre ich das in Linux auf der Kommandozeile mit qrencode erledigen. Das kann ich einfach ansteuern und dann mit dem entsprechenden Link zur Datei übernehmen.