QR-Code in Writer per Makro generieren

Hallo,

mein Ziel ist es einen QR-Code in einem Writer-Dokument per Makro zu generieren.

Im nachfolgenden Code wird ein leeres Quadrat (kann auch sein das ich ein Polygon benötige?) gezeichnet, in dem später der QR-Code erscheinen soll.

In diesem Code habe ich auch die Eigenschaften für den QR-Code beispielhaft festgelegt.

Beides funktioniert soweit.

Es ist mir jedoch noch nicht gelungen, den QR-Code auf Basis der Eigenschaften zu generieren und zur Anzeige
im Quadrat zu bringen.

< --- Code --- >|

REM Quelle:https://wiki.openoffice.org/wiki/DE/Makro_Basic_Tutorial|

SubsquareRectQR DimaPoint asnewcom.sun.star.awt.PointDimaSize

asnewcom.sun.star.awt.Size'mri thisComponent aPoint.x = 1000 aPoint.y =
1000 aSize.Width = 2000 aSize.Height = 2000 oRectangleShape =
thisComponent.createInstance("com.sun.star.drawing.RectangleShape")
oRectangleShape.Size = aSize oRectangleShape.Position = aPoint
'------------------------------------REM
Quelle:https://api.libreoffice.org/docs/idl/ref/structcom_1_1sun_1_1star_1_1drawing_1_1QRCode.htmlDimaQR
AsNewcom.sun.star.drawing.QRCode' mri aQR With aQR .Payload="Ananas"
'String.Border=2' 1-4 long .ErrorCorrection=1 '1-4longEndWith' ???
'generieren eines QR-Codesund dieÜbergabe an das Shape???' ???
'------------------------------------' mri oRectangleShape
thisComponent.getDrawPages.getByIndex(0).add(oRectangleShape) End Sub </|||--- Code --- |> Ich habe es auch erfolglos mit den QR-Code
Dispatch-Commands versucht. <|||--- Code --- |> REM ***** BASIC ***** Sub Main '.uno:EditQrCode
'.uno:InsertQrCode document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") rem

Hallo Jürgen,

mein Ziel ist es einen QR-Code in einem Writer-Dokument per Makro zu generieren.

die neueren LO-Versionen (ab 6.???) können das direkt: https://help.libreoffice.org/latest/de/text/shared/guide/qrcode.html
Vielleicht hilft das schon?

Gruß
Michael

Hallo Michael,

vielen Dank für die Rückmeldung.

Erläuterung:

1) Es geht bei mir um eine Dokumentvorlage.

2) In einer Tabellenzelle soll der QR-Code in einer vorgegebenen Größe
erscheinen.

3) Öffnet man die Dokumentvorlage, dann liegt zunächst ein Dokument
"unbenannt1" vor

4) Der Anwender soll das Dokument unmittelbar nach dem Öffnen speichern.
Damit der Anwender dies nicht vergißt,
gibt es ein ereignisgesteuertes Makro, welches den Filepicker aufruft.

5) Es liegt nun eine URL vor. Aus "ThisComponent.URL" wird der Dateiname
extrahiert.

6) Jetzt soll per Makro ein QR-Code generiert werden oder der
bestehenden QR-Code soll editiert werden, wobei der Eigenschaft
"Payload" zunächst der Dateinname übergeben werden soll.

7) Es ist ggf. eine Positionierung und eine Größenänderung des QR-Codes
erforderlich. Dieses habe ich per Zugriff auf "Drawpage.Shape" gelöst.

8a) Der Anwender nimmt nun noch Änderungen am Dokument vor. Einige
dieser Daten sollen auch noch in den QR-Code übernommen werden.
Somit wäre hier ein ereignisgesteuertes Editieren des QR-Codes erforderlich.
Ereignisgesteuerung = z.B. "Dokument schließen"

8b) Die hinzugefügten Daten sollen mehrzeilig in den  QR-Code eingefügt
werden:
Mein Test mit einem QR-Code-Scanner und dem aus dem Writer-Menü
erzeugten Code:

Dateiname \n Datum

führte leider nicht dazu, dass "Dateiname" und "Datum" in zwei Zeilen
standen.

Es blieb wortwörtlich bei:

Dateiname \n Datum

Viele Grüße

Jürgen

Hallo,
mich plagt das gleiche Problem, daher bin ich sehr an einem solchen
Makro interessiert. Bislang mache ich das manuell, was jedoch häufig zur
Folge hat, dass es schlicht vergessen wird -von meiner Chefin ganz zu
schweigen, denn die macht das überhaupt nicht. Ein Makro würde das
lösen, nur gelingt mir die Erstellung eines solchen Makros nicht.

Zu der Problematik mit dem Datum: dieses ist bei uns stets Teil des
Dateinamens, was auch außerhalb der jeweiligen Anwendung
Handhabungsvorteile bietet. Es sieht also so aus:
JJJJ-MM-TT_Adressat_Dokumentinfo.ext
also bspw.
2020-08-09_LOO-Liste_Info-zu-Makro.odt

Vielleicht lässt sich so das Makro vereinfachen?

Hallo,

ich habe hier mal eine Beispieldatei mit einem Makro hochgeladen:
https://c.web.de/@693152299987503749/oJTeh1UhSdqXKXFUj5YGlg

Kurzbeschreibung in der Datei.

Im Prinzip fehlt im Makro nur noch die passende Schnittstelle:
Zeichnungsobjekt (Shape) → QR-Code-Generator.

Es geht nicht nur um den Dateinamen und das Datum welches in der QR-Code übernommen werden soll.
Dies war nur ein Beispiel.
In meinem externen QR-Code-Scanner und Generator kann ich mehrzeiligen Text eingeben.
Nach dem Auslesen wird dieser auch genauso angezeigt.
Dies funktioniert in LibreOffice nicht!
Egal ob ich z.B. \n oder \p zur Zeilen-/ Absatzschaltung eingebe; kann ja auch anderes lauten?

https://www.codetwo.com/freeware/qr-code-desktop-reader/?sts=1375

Es geht also um verschiedenste Daten aus dem jeweiligen Dokument, welche in den QR-Code mehrzeilig gespeichert werden sollen.
Das Ganze automatisiert per Makro.

Viele Grüße

Jürgen

PS
Erbitte Hilfe zur Mailing-Liste:
In dieser Oberfläche sehe ich meine Mails nicht:
http://document-foundation-mail-archive.969070.n3.nabble.com/Users-f1703080.html

Nur hier:
https://listarchives.libreoffice.org/de/users/2020/maillist.html#2020-09-09

Ich arbeite mit Thunderbird 68.12.0 (64-Bit) und habe beim Versenden "Antworten an Liste" ausgwählt...

Hallo Jürgen,

Danke für die

Erläuterung:

1) Es geht bei mir um eine Dokumentvorlage.

2) In einer Tabellenzelle soll der QR-Code in einer vorgegebenen Größe
erscheinen.

3) Öffnet man die Dokumentvorlage, dann liegt zunächst ein Dokument
"unbenannt1" vor

4) Der Anwender soll das Dokument unmittelbar nach dem Öffnen speichern.
Damit der Anwender dies nicht vergißt,
gibt es ein ereignisgesteuertes Makro, welches den Filepicker aufruft.

5) Es liegt nun eine URL vor. Aus "ThisComponent.URL" wird der Dateiname
extrahiert.

6) Jetzt soll per Makro ein QR-Code generiert werden oder der
bestehenden QR-Code soll editiert werden, wobei der Eigenschaft
"Payload" zunächst der Dateinname übergeben werden soll.

7) Es ist ggf. eine Positionierung und eine Größenänderung des QR-Codes
erforderlich. Dieses habe ich per Zugriff auf "Drawpage.Shape" gelöst.

8a) Der Anwender nimmt nun noch Änderungen am Dokument vor. Einige
dieser Daten sollen auch noch in den QR-Code übernommen werden.
Somit wäre hier ein ereignisgesteuertes Editieren des QR-Codes erforderlich.
Ereignisgesteuerung = z.B. "Dokument schließen"

8b) Die hinzugefügten Daten sollen mehrzeilig in den QR-Code eingefügt
werden:
Mein Test mit einem QR-Code-Scanner und dem aus dem Writer-Menü
erzeugten Code:

Dateiname \n Datum

führte leider nicht dazu, dass "Dateiname" und "Datum" in zwei Zeilen
standen.

Es blieb wortwörtlich bei:
Dateiname \n Datum

Ich habe da keine tiefere Kenntnisse, jedoch hatte ich hier <http://members.chello.at/easyfilter/barcode.html> einmal eine Anleitung gefunden und die dort <http://members.chello.at/easyfilter/barcode.ods> zum Download angebotene .ODS heruntergeladen und erfolgreich genutzt; Deinen Hinweis "mehrzeilig" habe ich nicht verstanden, das kann mein Beispiel wohl nicht, die Anforderung von Boris sollte aber erfüllt sein. Deren Makro-Code ist sichtbar, vielleicht hilft das ...

Gruß
Michael

Hallo Jürgen,

Viele Grüße

Jürgen

PS
Erbitte Hilfe zur Mailing-Liste:
In dieser Oberfläche sehe ich meine Mails nicht:
http://document-foundation-mail-archive.969070.n3.nabble.com/Users-f1703080.html

mittlerweile sind die da! Manchmal dauert es einfach nur in Nabble.

Nur hier:
https://listarchives.libreoffice.org/de/users/2020/maillist.html#2020-09-09

Jo, unsere Archive sind super flott, weil es "das" erste ist, was die
Email bekommt. :slight_smile:

Ich arbeite mit Thunderbird 68.12.0 (64-Bit) und habe beim Versenden
"Antworten an Liste" ausgwählt...

Und das ist richtig so. :slight_smile:

Viele Grüße

Dennis Roczek

Hallo Michael,

<http://members.chello.at/easyfilter/barcode.ods>

Mit dieser Datei habe ich im Vorfeld schon experimentiert.
Darauf basiert auch meine hier gepostete Anfrage.

Mir ist es jedoch bis jetzt nicht gelungen den komplexen Algorithmus
nach Writer zu portieren.

Da LibreOffice nun über einen internen QR-Code-Generator verfügt, hatte
ich gehofft, dass mir jemand
sagen kann wie ich den Code schreiben muss, damit im Zeichnungsobjekt
ein QR-Code erscheint.

Nach meiner Code-Inspektion (mittels MRI) wird der QR-Code in einem
Shape-Objekt gezeichnet.
Für das Shape-Objekt gibt es aber keine Schnittstelle/ keinen Service
für den QR-Code-Generator.

Es gibt zwar ein Struct mit dem man die gewünschten Eigenschaften setzen
kann, aber diese
werden weder per API-Programmierung, noch per Dispatchercode angenommen.

Es hat den Anschein, als würden die Struct-Anweisungen in Leere laufen :frowning:

"mehrzeilig" habe ich nicht verstanden,

Wenn man in Writer den QR-Code-Dialog aufruft, ist es in der
Eingabezeile nur möglich einen einzeiligen Text einzugeben.
z.B.:
Datum Sachbearbeiter Rechnungsnummer Kundennummer

Eine Zeilen-/ Absatzschaltung ist NICHT möglich.

1)
In meinem externen QR-Code-Scanner/ Generator ist eine mehzeilige
Eingabe möglich:
Eingabe im Textfeld des Generator:
Datum
Sachbearbeiter
Rechnungsnummer
Kundennummer
usw.

2)
Es wird ein QR-Code mit genannten Eingabe generiert, inklusive der
Zeilenschaltung.

3)
Der gespeicherte QR-Code kann nun gescannt werden und das Ergebnis ist
nun 1:1 im Textfeld sichtbar, inkl.  der Mehrzeiligkeit:
Ausgabe im Textfeld des Scanners:
Datum
Sachbearbeiter
Rechnungsnummer
Kundennummer
usw.

@Dennis
Vielen Dank. Es scheint so, als hätte ich anfänglich einen Fehler
begangen, welchen weiß ich nicht.
Jetzt funktioniert es jedenfalls.

Viele Grüße

Jürgen

Hallo Jürgen,

Hallo Michael,
...
Nach meiner Code-Inspektion (mittels MRI) wird der QR-Code in einem
Shape-Objekt gezeichnet.
Für das Shape-Objekt gibt es aber keine Schnittstelle/ keinen Service
für den QR-Code-Generator.

Es gibt zwar ein Struct mit dem man die gewünschten Eigenschaften setzen
kann, aber diese
werden weder per API-Programmierung, noch per Dispatchercode angenommen.

Es hat den Anschein, als würden die Struct-Anweisungen in Leere laufen :frowning:

Ist dir klar, dass man in der Regel Eigenschaften in Structs nicht direkt setzen kann, sondern einen Umweg benötigt?
Etwa so:
Dim zwi_struct AS NEW ... 'wenn du den Typ nicht gleich weißt, dann nimm erst einmal VARIANT
zwi _struct = struct
zwi_struct.eigenschaft1 = ...
'usw.
struct = zwi_struct

Wenn du das nicht so gemacht hast, versuche es mal, vielleicht hast du Glück.

Gruß
Gerhard

Hallo Gerhard,

dies ist mein Dispatscher-Code:

/Sub Main//
//    document   = ThisComponent.CurrentController.Frame//
//    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")//
////
//      rem
----------------------------------------------------------------------//
//   dim args1(2) as new com.sun.star.beans.PropertyValue//
//   args1(0).Name = "Payload"//
//   args1(0).Value = "Ananas"//
//   args1(1).Name = "Border"//
//   args1(1).Value = 1//
//   args1(2).Name = "ErrorCorrection"//
//   args1(2).Value = 2//
////
//   dispatcher.executeDispatch(document, ".uno:InsertQrCode", "", 0,
args1())//
//End Sub/

Das Argument-Array wird bei der Verwendung von ".uno:InsertQrCode"
vollkommen ignoriert, läuft ins Leere.
Es wird zwar der QR-Code-Dialog aufgerufen, aber die Eigenschaften
wurden nicht übernommen.

Hinweis:
Es gibt noch diese Methode:

/   dispatcher.executeDispatch(document, ".uno:EditQrCode", "", 0, args1())/

, bin hier auch nicht weitergekommen

Viele Grüße

Jürgen

Hallo Jürgen,

zum Dispatcher kann ich überhaupt nichts sagen, außer, dass er nicht immer so funktioniert, wie man sich das wünscht.
Ich hatte dich so verstanden, dass du die Struktur QRCodeProperties des Shapes verändern wolltest, darauf bezog sich mein Hinweis. Ich habe das auch mal in einem Makro eines Writer-Dokuments getestet, in dem ich ein vorher per Einfügen -> Objekt -> QR-Code erzeugtes Shape verändere:

Sub Main

Dim QRShape as object, QR as object
Dim zwi_QR AS NEW com.sun.star.drawing.QRCode

QRShape = ThisComponent.CurrentSelection(0)
QR = QRShape.QRCodeProperties
zwi_QR = QR
zwi_QR.Payload = "zwei" & CHR(10) & "Zeilen"
QR = zwi_QR

End Sub

Danach steht der zweizeilige Text im Objekt QR.

Wie du damit weiterkommst, weiß ich auch noch nicht, ich müsste mich erst reinarbeiten in das Einfügen von Shapes in Writer. Dazu kommt das Problem, dass ich kein Werkzeug habe, um QR-Codes zu lesen, testen ist also schwierig.

Mehr versprach ich mir von Klaus-Michael Hesslers Beispiel-Dokument. Ich habe damit QR-Codes erzeugt für den Text "ZweiZeilen", einmal so, wie dasteht, einmal mit einem Zeilenumbruch vor "Zeilen". Da ich auf die Schnelle nicht wusste, wie ich das in der Funktion zu schreiben habe, habe ich den zweiweiligen Text in eine andere Zelle eingegeben und in der Funktion den Bezug auf diese Zelle angegeben. Der erzeugte Barcode sieht tatsächlich optisch anders aus.
Die Anzeige des Titels über rechte Maustaste -> Beschreibung ist nur einzeilig, da sieht man nichts. Aber wenn ich den Titel mit Xray anschaue, dann ist er zweizeilig, das lässt hoffen. Aber du müsstest schon den QR-Code selbst anschauen.
Wenn das ok ist, dann könntest du Michaels Code abwandeln, das dürfte sich wohl nur um den letzten Teil der sub QRCode ab Z. 333 handeln, und auf Writer und deine Gegebenheiten umschreiben.

Aber das muss ich dir überlassen.

Viele Grüße
Gerhard

Hallo Gerhard,

Dein Code hat mich zwar ein Stück weitergebracht, speziell diese
Eigenschaft:
QRShape.QRCodeProperties
1) Wenn man ein leeres Shape zeichnet, dann verfügt es NICHT über diese
Eigenschaft.
2) Erst wenn ein QR-Code generiert wurde, dann verfügt das Shape über
diese Eigenschaft.

Ich bin bei meinen Test noch auf andere Ungereimtheiten (Fehler?)
gestoßen, ob dies Bugs sind oder dies absichtlich so programmiert wurde
vermag ich nicht zu beurteilen.

Meine Anfrage betrachte ich nun als geschlossen, wenn auch nicht gelöst.
Ich werde vorläufig keine weitere Zeit zum Thema QR-Code verschwenden.

Habe im Augenblick auch keine Zeit irgendwelche Bug-Reports zu schreiben.

Bis dann...

Viele Grüße

Jürgen

Hallo,

mein Bug-Report:

https://bugs.documentfoundation.org/show_bug.cgi?id=136770

Habe allerdings die Befürchtung, dass es auch in Zukunft keine Lösung
gibt, mittels eines
Makros einen QR-Code zu generieren, weil die passende Schnittstelle
nicht implementiert ist.

Naja, wollen mal sehen ob sich dort noch etwas tut...

Viele Grüße

Jürgen