Base64 Encode/Decode

Hi,

I’m searching a platform-Independent way for encoding binary data to base64 in Basic for LibreOffice.

The purpose is the following:

  • get a LibO-document from a website
  • edit it
  • on Close save the document in temp, read the saved file and post base64-encoded to website

Every Implementation of base64 which works in MS-Office, doesn’t work in LibreOffice or have Windows-dependencies.
Or one has to work around Missing Functions.

Thanks,
Daniel

Why base64? LibreOffice documents are simple zip archives. What do you mean by “post to website”? — Why in English? This is the German part of Ask.

Hallo,
hab dann auch zu spät die Spracheinstellung gesehen…
Post an Webseite meint tatsächlich einen HTTP-POST-Request an eine serverseitige Anwendung, die dass Dokument dann speichert. Die reinen ZIP-Daten zu senden ist via HTTP praktisch nicht möglich, da zuviel escaped wird. Ich hab dass ganze schon in Word implementiert, und dort läuft es sehr performant und stabil.
Leider ist der base64-Code unter LibreOffice nicht lauffähig, obwohl es sich um “reinen” Basic-Code handelt.

Wenn es sich um reinen Basic-Code handelt, brauchst du wahrscheinlich nur den Dateizugriff anzupassen. Kannst du deine vorhandene Version zum Download irgendwo hochladen?

Dim iFile As Integer Dim sCont As String iFile = FreeFile() - Pastebin.com das?
Oder auch den Converter-Code?

Das einfache Datei-Lesen-Schreiben funktioniert nicht so gut. Du solltest es mit SimpleFileAccess versuchen oder einer der anderen Stream Methoden. In den mitgelieferten Makros findest du unter Tools/UCB die Makros “SaveDataToFile” und “LoadDataFromFile”. Dort wird ein TextInputStream benutzt. Für dich wird wohl eher ein SequenceInputStream in Frage kommen, siehe API. Ich bin aber nicht erfahren genug, um dir tatsächlich weiter helfen zu können.

Es hat mir doch keine Ruhe gelassen und ich habe ein bisschen rumprobiert. Ein Problem scheint zu sein, dass der Typ “Byte” nicht wirklich gut dokumentiert ist. Wenn man ihn wie in dim nA as byte benutzt, dann ist der zulässige Bereich [0…255] aber beim Schreiben/Lesen mit einem Stream ist der Bereich [-128…127]. Es geht wohl einigermaßen, wenn man nicht den Typ als byte festlegt, sondern ihn als variant lässt. Anscheinend funktionieren dann Konvertierungen.

In dem Dokument Base64_Tool_in_LibreOffice_Basic.odt sind meine Lösungen enthalten. Ich habe Sie mit Bildern auf Windows 7 getestet. Die Performance ist schlecht und im Code wirst du sicher viele Verbesserungsmöglichkeiten finden. Aber guck einfach mal rein, vielleicht findest du ja Ideen für dein Programm.

1 Like

Danke. Auf ein Problem mit dem byte-Datentyp wäre ich vermutlich als letztes gekommen.

Stephan Bergmann hat es als Bug eingestuft, dass der Stream keine Werte aus dem Bereich [128…255] aufnehmen kann und den Bug unmittelbar gefixed. libreoffice/core - main, development code repository Du wirst allerdings noch einige Zeit warten müssen, bis diese Version, dann released wird.

Bis dahin tut es der Code aus dem verlinkten Dokument ja auch. Hab mir die relevanten Teile raus genommen und in meinen eingebaut. Jetzt funktioniert alles so wie beabsichtigt. Performance ist zwar tatsächlich im Vergleich zu Office 2016 unterirdisch, aber 1 Sekunde wird der Nutzer ja warten können, zumal dass Dokument zu diesem Zeitpunkt ohnehin nicht mehr zu sehen ist. Nochmals vielen Dank für den Hinweis.

Ich suchte gerade eine Möglichkeit, wie ich mit Anhängen umgehe, die in XRechnungen eingebaut sind. Da fand ich diesen Thread. Dass die Lösung etwas dauert stört mich erst einmal nicht. Hat mir jedenfalls viel Arbeit erspart!

Hallo

python existiert und wird von LO “verstanden”, wie lange wird es noch dauern, das trotzdem grausamster Basic-code für solche Aufgaben gebastelt wird?

python-base64

“Wie lange?” → Es gibt in der Hilfe gar keine Anleitung für Python und bei den Handbüchern auch nicht und Python-Seiten im Wiki schienen auch nicht voran zu kommen. | Keine IDE für Python. | Ich scheue den Aufwand noch eine Programmiersprache zu lernen. | In dieser Frage ging es mehr um ein Problem mit Basic als um die Aufgabe “base64 Kodierung”.

Ich habe nach einer plattformübergreifenden Lösung gesucht, dazu gehören für mich auch keine zusätzlichen Abhängigkeiten auf Client-Seite. Javascript wie auch Python habe ich mir angesehen, es ist aber nicht sichergestellt, dass es auf allen Clients funktioniert. Basic ist hier immer noch das kleinste gemeinsame Vielfache (und damit dass kleinste Übel - zumal der Code zwischen LibreOffice und Microsoft zu 80 Prozent der gleiche ist - was bei Python leider nicht mehr der Fall ist).