PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LibreOffice als Webdienst



sertu
29.05.14, 13:08
Hallo zusammen

Ich bin nun seit einiger Zeit normalo Linux-User und muss für die Firma einige Abklärungen machen. Hobbymässig programmiere ich im Web.

Zur meiner Frage:

Unsere Webseite soll den Usern ein Dateiupload für Dokumente bereitstellen (.odt, .docx, .pdf etc.) und anschliessend automatisiert kleine Aufgaben erledigen, wie z.B unser Firmennamen am Schluss einfügen und die Wörter zaehlen etc.

Mit PHP konnte ich leider nicht 100% zuverlässig arbeiten, da MSOffice Produkte bzw. deren Dateien nicht wirklich mit PHP zuverlässig arbeiten kann. Wundert mich auch nicht.

Ich dachte deshalb das man einen kleinen Server aufbereitet wo LibreOffice dann auf die Dateien wartet und mir z.B. die Wörteranzahl zurück liefert und andere Aufgaben erledigt.

Wie muss ich vorgehen damit LibreOffice auf Server automatisiert seine Aufgaben erledigt? Mir geht es eher darum wo ich ansetzen muss damit ich weiss wo ich mich einlesen soll. Momentan habe ich keine Richtung und bin planlos:

Muss/Kann ich hier in Bash programmieren das nach einem Dateiupload LibreOffice startet?
Kann ich mir einer Sprache (PHP, Python o.ä.) LibreOffice "steuern".

Am Schluss sollte es dann einfach die Wörteranzahl auf der Website angezeigt bekommen und in einer Datei-Kopie den Inhalt ändern.

Ich hoffe ich habe mich genug klar ausgedrückt.
Ich bedanke mich für eure Tipps

mit freundlichen Grüssen

marce
29.05.14, 13:32
für php AFAIK Module, mit denen man recht problemlos mit MS-Office und auch LibreOffice-Dateien arbeiten kann.

Zudem gerade Libreoffice ja mit der Trennung von Design und Content recht einfach "einfach so" abzugreifen sein sollte.

LibreOffice selbst würde ich auf einem Server nicht laufen lassen bzw. starten - meist die sind die Kommandozeilenoptionen von solchen Programmen auch auf alles mögliche eingerichtet aber nicht zwingend auf Batchverarbeitung.

Einfacher macht man es sich, wenn man auf standardisierte und offene Dateiformate setzt.

Und grundlegend - Du suchst also ein Dokumentenmanagementsystem?

sertu
29.05.14, 14:02
für php AFAIK Module, mit denen man recht problemlos mit MS-Office und auch LibreOffice-Dateien arbeiten kann.

Zudem gerade Libreoffice ja mit der Trennung von Design und Content recht einfach "einfach so" abzugreifen sein sollte.

LibreOffice selbst würde ich auf einem Server nicht laufen lassen bzw. starten - meist die sind die Kommandozeilenoptionen von solchen Programmen auch auf alles mögliche eingerichtet aber nicht zwingend auf Batchverarbeitung.

Einfacher macht man es sich, wenn man auf standardisierte und offene Dateiformate setzt.

Und grundlegend - Du suchst also ein Dokumentenmanagementsystem?

Nein nicht wirklich.
Die Dokumente werden dann abgelegt und dann irgendwann man bearbeitet.
Wenn es grosse Dateimengen sind ist natürlich die Überlegung nicht weit entfernt, da hast du recht.

Aber wenn du meinst es gäbe PHP Module die zuverlässig arbeiten dann schaue ich mal genauer hin und berichte.

nopes
29.05.14, 14:15
Für Office Dokument:
Also nach deren Seite (http://api.libreoffice.org/docs/install.html) ist das möglich:
The LibreOffice 4.2 SDK comes with a set of development tools, base libraries, header files and helper class files that can be used to develop Java/C++ components, to embed the LibreOffice 4.2 application in your own programs, or to use the API (scripting or remote control the office).Soweit so gut, für die Scripte sieht es allerdings eher schlecht aus, zwar zeigen die hier (http://api.libreoffice.org/examples/examples.html) unter anderem, dass man von außen Scripten kann, auf die Schnelle habe ich da aber nur Zeugs für Mircrosoft System gesehen. Für andere System ist Python wohl eine Alternative, oder eben die "echten" bzw. hohen Programmiersprachen.
Aus eigener Erfahrung würde ich dennoch davon abraten, Office fernsteuern läuft einfach nicht stabil genug, was nutzt es wenn es doch nur in 99,9% der Fälle läuft? Da biste hintenheraus nur mit drumherum frickeln zu gangen! Versuche so schnell wie möglich in ein Format zu kommen, welches vernünftig ist, also offen, also doc->docx oder odt, für beide gibt es genüngend Script APIs für alle möglichen Script Sprachen.

Für PDF:
Gibt es ebenfalls APIs für eigentlich alle Script Sprachen. Manipulieren ist aber so eine Sache, geht zwar idR ist aber oft keine gute Idee, da die meisten PDFs dabei beschädigt werden, so dass diese für eine weiter Verarbeitung in der PDF Normen bzw. Formate eine Rolle spielen nicht geeignet sind.

sertu
29.05.14, 14:27
Für Office Dokument:
Also nach deren Seite (http://api.libreoffice.org/docs/install.html) ist das möglich:Soweit so gut, für die Scripte sieht es allerdings eher schlecht aus, zwar zeigen die hier (http://api.libreoffice.org/examples/examples.html) unter anderem, dass man von außen Scripten kann, auf die Schnelle habe ich da aber nur Zeugs für Mircrosoft System gesehen. Für andere System ist Python wohl eine Alternative, oder eben die "echten" bzw. hohen Programmiersprachen.
Aus eigener Erfahrung würde ich dennoch davon abraten, Office fernsteuern läuft einfach nicht stabil genug, was nutzt es wenn es doch nur in 99,9% der Fälle läuft? Da biste hintenheraus nur mit drumherum frickeln zu gangen! Versuche so schnell wie möglich in ein Format zu kommen, welches vernünftig ist, also offen, also doc->docx oder odt, für beide gibt es genüngend Script APIs für alle möglichen Script Sprachen.

Für PDF:
Gibt es ebenfalls APIs für eigentlich alle Script Sprachen. Manipulieren ist aber so eine Sache, geht zwar idR ist aber oft keine gute Idee, da die meisten PDFs dabei beschädigt werden, so dass diese für eine weiter Verarbeitung in der PDF Normen bzw. Formate eine Rolle spielen nicht geeignet sind.

Wenn ich natürlich per Skript erledigen kann, ist es für uns noch besser da wir uns dann eventuell den Server sparen können.
Kannst du den aus Erfahrung eventuell verraten welche Programmiersprache dir vorschwebt?
Ich werde mal weiter forschen!

nopes
29.05.14, 14:59
Eine in der man auf kein laufendes Office Produkt angewiesen ist, um die Dokumente zu bearbeiten. Welche ist dann egal, halt die die du am besten kannst. Allerdings behaupten viele Leute, dass Python ganz tolle Design Features hat, die es toller als andere machen, wenn du also unbelastet bist, warum kein Schlangenbeschwörer werden?

ThorstenHirsch
29.05.14, 15:45
Ich lehne mich mal weit aus dem Fenster und behaupte: das kann nur schiefgehen. Office-Dokumente kann man nur innerhalb der Office-Anwendung vernünftig automatisiert bearbeiten, also in MS Office mit VBA.

Von außen Office-Dokumente automatisiert verarbeiten? No way.

Nur mal ein Detail (und von dieser Sorte gibt es hunderte bei dieser Aufgabenstellung): Wo soll denn das Logo hin? Wenn ich das Dokument manuell bearbeite, würde ich es bündig mit dem Rand einfügen. Der Rand kann aber verschieden groß sein (kann ja der Autor entscheiden). Wie willst du automatisiert die Breite des Rands abfragen? Bei MS Office und LibreOffice wird das möglicherweise noch funktionieren, bei PDF aber bestimmt nicht.

Wollt ihr euren Usern nicht lieber Templates zur Verfügung stellen, in denen ihr das Logo schon drin habt?

sertu
29.05.14, 16:30
Ja, so beim durchlesen und nachforschen ist mir das auch klarer geworden.
Höchstens einen MSServer und mit .NET Framework --> nicht wirklich angestrebt.

Ich konnte soweit mit PHP eine WordDatei öffnen (besser: die XML Datei), auslesen und nur der Text ausgeben.
Eigentlich nicht allzu schlecht. Nur unterscheidet Word irgendwie die einzelnen Zeilenumbrüche nicht. Also diese Zeilenumbrücke die mit "Shift+Enter" gemacht wurden haben kein Leerzeichen sondern sind am vorigen String angehängt. Somit kann die Wörterzählung niemals genau sein.
Der PHP Code habe ich im Netz gefunden und minimal verändert



function docx2text($filename) {
return readZippedXML($filename, "word/document.xml");
}

function readZippedXML($archiveFile, $dataFile) {
// Create new ZIP archive
$zip = new ZipArchive;

// Open received archive file
if (true === $zip->open($archiveFile))
{
// If done, search for the data file in the archive
if (($index = $zip->locateName($dataFile)) !== false)
{
// If found, read it to the string
$data = $zip->getFromIndex($index);
// Close archive file
$zip->close();
// Load XML from a string
// Skip errors and warnings
$xml = DOMDocument::loadXML($data, LIBXML_NOENT | LIBXML_XINCLUDE | LIBXML_NOERROR | LIBXML_NOWARNING);
// Return data without XML formatting tags
return strip_tags($xml->saveXML());
}
$zip->close();
}

// In case of failure return empty string
return "";
}
?>

sertu
29.05.14, 20:18
Kleines Update von mir.

Wie schon empfohlen werde ich die geladenen Dokumente zu einem gemeinsamen Nenner bringen.

Ich wandle die docx. Dokumente in .pdf um.
Die .pdf werden dann zu .html Dateien.
Jetzt kann man dann bequemer und um Welten zuverlässiger verarbeiten bzw. Wörter zählen:cool:
Personen die schon .pdf heraufladen ist auch schon geholfen

freundliche Grüsse

P.S. Ich ärgere mich dass ich mich den ganzen Tag im Kreis gedreht habe und zufällig darauf gestossen bin :ugly:

ThorstenHirsch
29.05.14, 22:11
Ärgere dich nicht. Du machst dir Gedanken, fragst hier nach Tipps und hast jetzt schon groß umdisponiert (meiner Meinung nach in die richtige Richtung). Das ist viel besser als unreflektiert in blinden Aktionismus zu verfallen und während oder sogar nach der Umsetzung erst zu bemerken, dass man komplett falsch vorgegangen ist.

sertu
29.05.14, 23:03
Ärgere dich nicht. Du machst dir Gedanken, fragst hier nach Tipps und hast jetzt schon groß umdisponiert (meiner Meinung nach in die richtige Richtung). Das ist viel besser als unreflektiert in blinden Aktionismus zu verfallen und während oder sogar nach der Umsetzung erst zu bemerken, dass man komplett falsch vorgegangen ist.

Schlussendlich besser, ja.

Momentan schaue ich wie automatisiert pdf konvertieren kann bzw. ohne gross Bibliotheken zu laden. Ich habe einige PHP Sachen gefunden. Sie verlangen jedoch einige Bibliotheken die einen normalen Webhoster nicht haben sondern eher ShellZugriff verlangen. Nur wegen der Datensicherheit oder allgemein traue ich mich nicht wirklich an RootServer heran.

Kennt sich jemand aus bzw. kennt eine gut API (Google?)

Folgendes muss er können:
.odt in .pdf
.doc in .pdf
.docx in pdf
usw.
und schlussendlich
.pdf in .html

nopes
29.05.14, 23:38
Naja vielleicht gibt es irgendwelche Online Dienste die sowas kostenfrei anbieten, so dass du mit simplen HTTP-Requests auskommen würdest, weiß ich aber nicht. Ansonsten führt da denke ich kein Weg an einen echten Server vorbei und du wirst auch große Teile eines, bis hin zu einem kompletten Office Paket brauchen.

Ansonsten drängt sich das CLI von libre auf, siehe hier (http://ask.libreoffice.org/en/question/2641/convert-to-command-line-parameter/), man beachten auch hier (http://ask.libreoffice.org/en/question/1686/how-to-not-connect-to-a-running-instance/); außerdem die Eingebung das man auch direkt nach HTML gehen kann und bekommt dann das:
libreoffice --headless --invisible --convert-to html:"HTML.xcu" /srv/myService/input/* --outdir /srv/myService/converted_htmlFür PDF-Dateien gibt es das Werkzeug "PDFTOHTML (http://pdftohtml.sourceforge.net/)".

cane
30.05.14, 22:33
Wir bei Open-Xchange haben mittlerweile fast 30 der ehemaligen Star Office und OpenOffice Truppe eingestellt, die Jungs haben unter Oracle Hoheit seinerzeit übrigens auch ein Cloud Office entwickelt.

Haben jetzt schon einige dutzend Mannjahre entwickelt und das ganze OX Documents genannt, ist als einzigstes Online Office OpenSource und speichert und liest per Standard DOCX / XLSX, keine Konvertierung notwendig. Der ein oder andere mag die ix Artikel dazu gelesen haben.

Vielleicht kannst du damit etwas anfangen für deine Zwecke:
http://oxpedia.org/wiki/index.php?title=AppSuite:Text_Installation_Guide

mfg
cane

sertu
01.06.14, 21:38
Hallo

Ich kann einige Fortschritte verzeichnen.

Ich konnte mittels API von www.cloudconvert.org entsprechende Konvertierungen per PHP machen. ;)

Mein Chef fand die Idee nicht so toll da Drittanbieter und unsere Dokumente höchst heikel sind.... tjaaaa :ugly::ugly: (Für die "verschwendete" Zeit hat er mir dafür einen Tag geschenkt inkl. Nachtessen :cool: )

Er will einen Root-Server wo alles unter unserer/seiner Kontrolle ist.
Linux Programme gibt es eigentlich auch gute (pdftotext und docx2txt). Danke an "nopes"

Wie funktioniert das, wenn bei einem Dateiupload automatisch die Programme gestartet werden? Die beiden genannten Programme lassen sich über das Terminal bedienen.

Muss ich mich in die Shell-Programmierung einlesen?


Gruss und guten Wochenstart

TheDarkRose
02.06.14, 16:25
Rootserver ist da ein Muss, jap. Wobei überlegt werden sollte, ob die Maschine nicht auch in der Firma stehen kann.

Zum Zusammenbau, hast dir da ziemlich was vorgenommen. Würde da auf jeden Fall mehrschichtig arbeiten. Ein Web Frontend welches halt für den Upload und die Speicherung. Den Rest würde ich z. B. über RabbitMQ an entsprechende Programme weiterleiten, die die Verarbeitung unabhängig vom Web erledigen.

nopes
02.06.14, 22:38
...
Muss ich mich in die Shell-Programmierung einlesen?...
Naja du kannst PHP, damit sind die Basics da, nur die Syntax ist anders ;)
Wobei PHP ist ja inzwischen auch gut als (Shell)Skript nutzbar, bin mir ziemlicher sicher, dass du mit Suchen im Netz alles hinkriegen wirst; die Frage wäre vermutlich auch erstmal welche Shell (http://de.wikipedia.org/wiki/Unix-Shell) darf es denn sein.

[EDIT]Zum Thema Sicherheit bei Root Servern, ist ja auch ein Vorbehalt. Nun ich denke deine Anwendungen und Dienste sind überschaubar, damit auch der Sicherungsaufwand, der aber natürlich da ist und sich in Arbeitszeit ausdrückt :D
Vermutlich hilft auch ein bisschen üben/probieren/test in der VM, wirklich sehr zu empfehlen! Dann sehe ich da kein so großes Problem bzgl. Server-Wartung.

sertu
03.06.14, 08:21
Danke für die Antworten!


Ist es aber nicht gefährlich per PHP auf dem Server die Skripte etc. auszuführen/aufzurufen?
Oder meinst du eher PHP anstatt SHELL?

Die VAriante von TheDarkRose gefällt mir da schon eher :)

nopes
03.06.14, 10:49
Ist es aber nicht gefährlich per PHP auf dem Server die Skripte etc. auszuführen/aufzurufen?
Oder meinst du eher PHP anstatt SHELL?Nicht gefährlicher als andere Aktionen und ja ich meinte das man durchaus ein PHP-Skript statt Shell-Skript schreiben kann.
Zwiebel bzw. Schichtmodell ist toll, da spricht auch wirklich nichts gegen, allerdings schaffst du dir mit sowas wie Rabbit einen neuen Dienst, der verstanden sein will, da du sonst nicht absichern usw. kannst...