Docx zu pdf mit openoffice headless viel zu langsam
Habe ich mit PHPWord für docx-Dateien zu generation. Und es funktioniert bestens.
Nun habe ich aber die müssen auch zur Verfügung stellen, einige dieser Dateien auf eine pdf-version.
Nach ein paar Recherchen fand ich PyODConverter die Verwendung OOo. Schien eine ganz gute option, da möchte ich nicht angewiesen auf Drittanbieter-web-services. Ich versuchte es auf meinem Rechner und es funktioniert belangt, so habe ich angewendet, es auf meinem server auch. Es dauerte ein wenig länger, aber ich habe es geschafft, um es arbeiten auch dort.
Gibt es jedoch eine (schlechte) Sache. Auf dem server dies dauert etwa 21 Sekunden, um es getan, während auf meinem Rechner dauert es nicht länger als 2. 🙁
Das ist viel zu viel Zeit für meine Bedürfnisse, also ich habe versucht zu erkennen, was könnte die Ursache dieser Verzögerung.
Starten von openoffice in healess-Modus mit sockel Schöpfung ist okay.
So habe ich das python-Skript versucht, um herauszufinden, welcher Unterricht verursachen könnte, zu verlangsamen. Ich habe es eingeengt zu dieser Zeile:
context = resolver.resolve("uno:socket,host=127.0.0.1,port=8100;urp;StarOffice.ComponentContext")
Dies ist die Aktion, dass die Einnahme über 20secs zu führen.
Den code, wo es eingefügt wird:
localContext = uno.getComponentContext()
resolver = localContext.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", localContext)
try:
context = resolver.resolve("uno:socket,host=127.0.0.1,port=8100;urp;StarOffice.ComponentContext")
except NoConnectException:
raise DocumentConversionException, "failed to connect to OpenOffice.org on port %s" % port
self.desktop = context.ServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", context)
Irgendwelche Hinweise auf das, was könnte die Ursache dieser Verzögerung?
Ich habe ausgeschlossen das Dokument, die ich versuche zu konvertieren, da diese Operationen kommen vor.
Könnte es ein problem sein, mit 'uno'? Oder vielleicht ein anderes fehlenden Bibliothek, die verursachen könnte, dass nutzlose Tests während der resolve () - operation?
Alle Ideen sind willkommen. 🙂
Beste Grüße, Restless
- was sind die hardware-specs der beiden Maschinen?
- Mein server läuft auf einem AWS standard small instance. AWS-Instance-Typen Auf meinem Rechner CPU: AMD Athlon II X4 635 2.9 GHz-Socket AM3-Quad-Core-Prozessor, Arbeitsspeicher: DIMM Synchron-1333 MHz (2+2GB). Aber ich bezweifle, dass diese hardware verknüpft ist..
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich beseitigt die Verzögerung, die durch die Verwendung von Rohren statt der buchsen für die Verbindung.
Ich habe noch ein problem und zwar... der Benutzer der Ausführung des python-Skript muss die gleiche sein, startet OOo für alles zu arbeiten, okay. Normalerweise wäre es nicht viel von einem Problem, aber ich versuche zum ausführen von python aus meiner web-Anwendung, und ich immer noch nicht geschafft es zum laufen zu bringen.
Ich versuche mit so etwas wie dies:
Ich bekomme nichts von dieser.. und ich verstehe nicht, warum. Vielleicht ist der user (www-data) ausführen von exec() nicht über die Berechtigung zum ausführen von sudo??
uno:pipe
? Ich bin noch auf der Suche, aber nicht alles finden.Vielleicht der name-resolver auf dem server nicht weiß
localhost
(das wäre sehr seltsam, aber 20 Sekunden klingt wie ein DNS-timeout). Sie könnten versuchen, ersetzen Sie es mit127.0.0.1
.Alternativ vielleicht macht das lookup-gut, immer beide IPv6-und IPv4-Adressen zurück
localhost
versucht, die Verbindung per IPv6 und nicht (D. H. die Komponente kann keine Unterstützung für IPv6, oder nicht binden, die Schnittstelle standardmäßig) und nur dann einen fallback auf IPv4. In diesem Fall ist die Abhilfe wäre die gleiche: ersetzenlocalhost
mit127.0.0.1
.Seine schade, dass openoffice ist so schwer. Ich wurde auch überlegt, aber dann fand ich leichtere Lösung, ist abiword.
Hatte ich zum generieren der Vorschau der ersten 4 Seiten aus dem hochgeladenen Dokument. Dies ist, was ich getan habe:
So können Sie den letzten abiword und probieren Sie etwas wie dieses: