Welcome, Guest
Username: Password: Remember me
s =

TOPIC: Anleitung: ODT nach PDF konvertieren

Anleitung: ODT nach PDF konvertieren 1 year 5 months ago #56746

  • mschwenker
  • mschwenker's Avatar
  • OFFLINE
  • Fresh Boarder
  • Posts: 1
  • Thank you received: 3
  • Karma: 0
Hallo zusammen,

ich bin im Rahmen meines Integrationsprozesse auf die Möglichkeit gestoßen, die ODT Templates direkt als PDF konvertieren zu lassen und ohne das odt2pdf.sh Script zu verwenden. Da die folgende Schritte nicht dokumentiert sind und ich sie nur gefunden habe, weil ich mir den PHP Code (odt.php) angeschaut habe, hier eine kurze Anleitung.

Zur Info ich verwendet die neuste Version 8.0.0, deswegen kann ich nicht sagen ob es mit älteren bereits auch geht.
  1. LibreOffice installieren, wenn nicht schon vorhanden
  2. Sicherstellen das soffice.exe im Windows/Linux Path bekannt ist. Unter Windows ist zu beachten das der Pfad nicht im Benutzer Path sondern im System Path liegt, sonst findet PHP die soffice.exe Datei nicht.
  3. In Dolibarr unter Einstellungen->Andere Einstellungen folgende Variablen hinzufügen
  4. MAIN_ODT_AS_PDF auf libreoffice setzen
  5. MAIN_ODT_AS_PDF_DEL_SOURCE auf 1 setzen. (Optional). Das löscht nach Erstellung die generierte ODT Datei

Das wars. Ich habe es auf einem Windows System getestet. Ich werde das jetzt noch auf einem Debian Server, ohne UI testen. Das sollte aber gehen weil Dolibarr das Programm soffice im headless mode ausführt.

Ich habe es jetzt auch auf einem Linux System getestet, Ubuntu 18.0 (ohne UI). Es war dabei ein bischen was zu beachten.

Damit die Anwendung soffice die Konvertierung durchführen konnte, musste das Verzeichnis /var/www entsprechende Schreibrechte besitzten. Ich es erst auf chmod +R 777 gestellet. Einmal ausgeführt, und dann auf chmod +R 755. Seit dem läuft es Problem los.

soffice muss einmalig einen .cache Ordner anlegen und ein paar Dateien schreiben. Ansonsten kommt es zu Merkwürdigen fehlern.
Last Edit: 1 year 5 months ago by mschwenker.
The administrator has disabled public write access.
The following user(s) said Thank You: creamycewie, tevsa, Björn

Anleitung: ODT nach PDF konvertieren 1 year 5 months ago #56755

Hallo.

Danke für den hilfreichen Tipp.
Nur eine kleine Frage dazu:
LibreOffice muss (nehme ich an) am Server installiert sein oder?
Lässt sich dies irgendwie auf den Client auslagern?

Lieben Dank!
The administrator has disabled public write access.

Anleitung: ODT nach PDF konvertieren 11 months 1 week ago #57026

  • tevsa
  • tevsa's Avatar
  • OFFLINE
  • Fresh Boarder
  • Posts: 3
  • Karma: 0
Hallo zusammen,

erstmal danke an Mschwenker für die Anleitung.
Ich habe diese Anleitung 1:1 nachvollzogen.
Sie klappt auch - jedenfalls laut Log. In der Logdatei wird der Befehl ja angezeigt:

dolibarr.log
Odf::exportAsAttachedPDF $execmethod=2 Run command=soffice -headless -convert-to pdf -outdir "c:/dolibarr/dolibarr_documents/facture/(PROV172)" "c:/dolibarr/dolibarr_documents/facture/(PROV172)/(PROV172)_invoice-2018.odt"
Im Log wird der entsprechende String auch angezeigt, der wenn ich Ihn kopiere und in der Bash (bzw DOS-Box) ausführe auch prima funktioniert- Ich habe beides ausprobiert.

Im Produktiv-System (Linux) sind auch die entsprechenden Ordner auf 775 bzw. 777 (testweise) gesetzt.


Was mich am meisten wundert ist das es in der Bash (console) ja funktioniert,
nur wenn es der PHP-Code im odt.php machen soll macht er es nicht.

Jemand eine Idee woran das liegen könnte?

Lieben Dank
The administrator has disabled public write access.

Anleitung: ODT nach PDF konvertieren 1 month 3 weeks ago #57583

Man muss Folgendes verstehen:

php-Code der Webseite wird von dem Webserver aufgerufen. Das kann beispielsweise Apache oder nginx sein. Jetzt muss man wissen, unter welchem Benutzer denn der Apache oder der nginx überhaupt laufen. Dieser Benutzer ist es letztendlich, der soffice aufruft.

Beim ersten Aufruf wird im home-Verzeichnis eines Benutzer ein Unterverzeichnis libreoffice angelegt, und darin viele weitere Unterverzeichnisse, wo diverse Einstellungen hinterlegt werden.

Wenn dieses Verzeichnis nicht existiert oder nicht beschreibbar ist, dann kommt es zu einem Problem.

Man kann ganz einfach herausfinden, ob sich soffice mit dem entsprechenden Nutzernamen starten lässt, indem man den Nutzernamen ermittelt und dann soffice per sudo mit genau diesem Nuternamen startet.

Am einfachsten ist das, indem man sich vorher zu root macht:
# sudo su -
Bei mir läuft nginx als Webserver und der wiederum läuft bei mir unter dem Benutzernamen nobody. Also versuche ich, mit dem Benutzer nobody das Programm soffice zu starten. "--headless" als Parameter ist notwendig, damit Libreoffice nicht wirklich mit einer grafischen Benutzeroberfläche gestartet wird.
# sudo -u nobody soffice --headless
Wenn ich das mache, bekomme ich aber folgende Fehlermeldung
LibreOffice 6.2 - Fatal Error: The application cannot be started.
User installation could not be completed.
Also schaue ich doch mal, was denn überhaupt das home-Directory von nobody ist:
# grep nobody /etc/passwd
und ich erhalte:
nobody:x:65534:65534:nobody:/var/empty:/bin/false
Mit anderen Worten: nobody möchte gerne in /var/empty schreiben, was aber nicht zulässig ist. Außerdem verfügt nobody auch über keine Shell, was aber auch so gewollt ist.

Jetzt gibt es mehrere Möglichkeiten:
1. Man lässt den Webserver über einen anderen User laufen, der mehr Rechte hat.
2. Man ändert die Rechte des Home-Verzeichnisses
3. Man ändert den Code der odf.php dahingehend, dass ein weiterer Parameter verwendet wird: -env
Bei mir steht in Zeile 587:
$command ='soffice --headless --convert-to pdf --outdir '. escapeshellarg(dirname($name)). " ".escapeshellarg($name);
Das ändere ich dann beispielsweise in
$command ='soffice --headless -env:UserInstallation=file:///tmp/nobody --convert-to pdf --outdir '. escapeshellarg(dirname($name)). " ".escapeshellarg($name);
mit -env:UserInstallation=file:///tmp/nobody (wirklich nur _ein_ Minuszeichen vor dem env) lege ich fest, wo denn das home-Verzeichnis sein soll. Damit läuft es dann ganz bestimmt, weil das /tmp-Vereichnis gewöhnlich von jedem Benutzer aus beschreibbar ist. Alternativ kann man natürlich auch ein temp-Verzeichnis aus dem Dolibarr document-Verzeichnis nutzen. Meines Erachtens ist das schöner.

Ich will mal sehen, ob ich das nicht offiziell in die Sourcen kriege, sodass es in Zukunft diese Probleme nicht mehr gibt.

Ich hoffe, ich konnte helfen.
Last Edit: 1 month 3 weeks ago by dolichicken.
The administrator has disabled public write access.

Anleitung: ODT nach PDF konvertieren 2 weeks 5 hours ago #57692

  • Björn
  • Björn's Avatar
  • OFFLINE
  • Fresh Boarder
  • Posts: 1
  • Karma: 0
Hallo,

kann mir jemand einen Hoster empfehlen, der libreOffice auf dem Server installiert hat, sodass ich MAIN_ODT_AS_PDF verwenden kann?
Was hat es mit der odt2pdf.sh auf sich, brauche ich dafür auch libreOffice auf dem Server? Gibt es sonst noch eine Methode automatisch auf dem Server odt Templates in pdfs zu konvertieren?

Danke und viele Grüße
Björn
The administrator has disabled public write access.
Moderators: Peter A. Gebhardt
Time to create page: 0.081 seconds