Frage stellen
0

base64 Encode/Decode

gefragt 2017-06-01 12:10:20 +0200

danhen Gravatar-Bild

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

Bearbeiten Tags ändern Melden schließen vereinen löschen

Kommentare

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.

Regina Gravatar-BildRegina ( 2017-06-01 18:11:12 +0200 )Bearbeiten

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.

danhen Gravatar-Bilddanhen ( 2017-06-01 21:11:17 +0200 )Bearbeiten

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

Regina Gravatar-BildRegina ( 2017-06-02 15:52:26 +0200 )Bearbeiten

https://pastebin.com/kbThVfRc das? Oder auch den Converter-Code?

danhen Gravatar-Bilddanhen ( 2017-06-02 16:39:47 +0200 )Bearbeiten

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.

Regina Gravatar-BildRegina ( 2017-06-02 23:34:58 +0200 )Bearbeiten

2 Antworten

0

geantwortet 2017-06-08 01:05:24 +0200

Regina Gravatar-Bild

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.

Bearbeiten Melden löschen Link mehr

Kommentare

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

danhen Gravatar-Bilddanhen ( 2017-06-08 08:59:04 +0200 )Bearbeiten

Stephan Bergmann hat es als Bug eingestuft, dass der Stream keine Werte aus dem Bereich [128..255] aufnehmen kann und den Bug unmittelbar gefixed. https://cgit.freedesktop.org/libreoff... Du wirst allerdings noch einige Zeit warten müssen, bis diese Version, dann released wird.

Regina Gravatar-BildRegina ( 2017-06-08 18:42:00 +0200 )Bearbeiten

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.

danhen Gravatar-Bilddanhen ( 2017-06-08 19:30:59 +0200 )Bearbeiten
0

geantwortet 2017-06-16 18:59:04 +0200

karolus Gravatar-Bild

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

Bearbeiten Melden löschen Link mehr

Kommentare

"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".

Regina Gravatar-BildRegina ( 2017-06-17 02:17:58 +0200 )Bearbeiten

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).

danhen Gravatar-Bilddanhen ( 2017-06-18 10:24:03 +0200 )Bearbeiten
Registrieren oder einloggen, um zu antworten

Antwortwerkzeuge

1 Beobachter

Statistik

Gefragt: 2017-06-01 12:10:20 +0200

Angesehen: 920 Mal

Aktualisiert: Jun 16 '17