Frage

Nun testen ich meine jython Programm, das einige nette [ ".xls", ".doc", ".rtf", ".tif", ".tiff", ".pdf" -Dateien] tut -> pdf ( Zwischendatei) -> tif (endgültige Ausgabe) Umwandlung Open Office verwenden. Wir zogen von MS Office entfernt aufgrund der Probleme, die wir mit der Automatisierung hatte. Nun scheint es, wir haben viele Flaschen umgeworfen Zusammenhang Stopper zeigen Fehler mit einer Flasche verbleibt. OO hängt nach einer Weile.

Es passiert, wenn Sie diese Zeile sehen ‚<<<<<<<<<<<<‘ im Code

Was ist der richtige Weg für mich ins Stocken geraten Open Office Prozess zu behandeln. könnten Sie bitte Links, und geben Sie mir einen guten Vorschlag auf dem Weg heraus schaffen.
Auch eine weitere Frage.

Fazit:
* Wie ein ins Stocken geraten Open Office Instanz behandeln?
* Wie Umwandlung mit Java kopflos zu machen, so dass ich nicht eine GUI die ganze Zeit verschwenden Speicher Aufspringen.
* Auch keine allgemeinen Vorschläge zur Code-Qualität, Optimierungen und allgemeinen Codierungsstandards geschätzt werden.


Traceback (innermost last):
  Die Datei "dcmail.py", Linie 184, in?
  File "dcmail.py", Zeile 174, in dem Haupt
  Datei "C: \ DCMAIL \ digestemails.py", Linie 126, in process_inbox
  Die Datei "C: \ DCMAIL \ digestemails.py", Linie 258, in _convert
  Datei "C: \ DCMAIL \ digestemails.py", Linie 284, in _choose_conversion_type
  Die Datei "C: \ DCMAIL \ digestemails.py", Linie 287, in _open_office_convert
  Die Datei "C: \ DCMAIL \ digestemails.py", Linie 299, in _load_attachment_to_convert
com.sun.star.lang.DisposedException: java.io.EOFException
        bei com.sun.star.lib.uno.bridges.java_remote.java_remote_bridge $ MessageDi spatcher.run (java_remote_bridge.java:176)

com.sun.star.lang.DisposedException: com.sun.star.lang.DisposedException: java.i o.EOFException

Nur diese Ausnahme nur zu klären wirft, wenn ich den offenen Office-Prozess zu töten. Ansonsten wartet das Programm nur für Open Office zu vervollständigen. Auf unbestimmte Zeit


Der Kodex (mit nicht funktionalen Code-Tags)

[code]

  
#ghost script handles these file types  
GS_WHITELIST=[".pdf"]  
#Open Office handles these file types  
OO_WHITELIST=[".xls", ".doc", ".rtf", ".tif", ".tiff"]   
#whitelist is used to check against any unsupported files.  
WHITELIST=GS_WHITELIST + OO_WHITELIST   
  
def _get_service_manager(self):
    try:
        self._context=Bootstrap.bootstrap();
        self._xMultiCompFactory=self._context.getServiceManager()
        self._xcomponentloader=UnoRuntime.queryInterface(XComponentLoader, self._xMultiCompFactory.createInstanceWithContext("com.sun.star.frame.Desktop", self._context))
    except:
        raise OpenOfficeException("Exception Occurred with Open Office")

def _choose_conversion_type(self,fn):
    ext=os.path.splitext(fn)[1]
    if ext in GS_WHITELIST:
        self._ghostscript_convert_to_tiff(fn)
    elif ext in OO_WHITELIST:
        self._open_office_convert(fn)

def _open_office_convert(self,fn):
    self._load_attachment_to_convert(fn)
    self._save_as_pdf(fn)
    self._ghostscript_convert_to_tiff(fn)

def _load_attachment_to_convert(self, file):
    file=self._create_UNO_File_URL(file)
    properties=[]
    p=PropertyValue()
    p.Name="Hidden"
    p.Value=True
    properties.append(p)
    properties=tuple(properties) 
    self._doc=self._xcomponentloader.loadComponentFromURL(file, "_blank",0, properties) <<<<<<<<<<<<<<< here is line 299

def _create_UNO_File_URL(self, filepath):
    try:
        file=str("file:///" + filepath)
        file=file.replace("\\", "/")
    except MalformedURLException, e:
        raise e
    return file

def _save_as_pdf(self, docSource):
    dirName=os.path.dirname(docSource)
    baseName=os.path.basename(docSource)
    baseName, ext=os.path.splitext(baseName)
    dirTmpPdfConverted=os.path.join(dirName + DIR + PDF_TEMP_CONVERT_DIR)
    if not os.path.exists(dirTmpPdfConverted):
        os.makedirs(dirTmpPdfConverted)
    pdfDest=os.path.join(dirTmpPdfConverted + DIR + baseName + ".pdf")
    url_save=self._create_UNO_File_URL(pdfDest)
    properties=self._create_properties(ext)
    try:
        try:
            self._xstorable=UnoRuntime.queryInterface(XStorable, self._doc);
            self._xstorable.storeToURL(url_save, properties)
        except AttributeError,e:
                self.logger.info("pdf file already created (" + str(e) + ")")
                raise e
    finally:
        try:
            self._doc.dispose()
        except:
            raise

def _create_properties(self,ext):
    properties=[]
    p=PropertyValue()
    p.Name="Overwrite"
    p.Value=True
    properties.append(p)
    p=PropertyValue()
    p.Name="FilterName"
    if   ext==".doc":
        p.Value='writer_pdf_Export'
    elif ext==".rtf":
        p.Value='writer_pdf_Export'
    elif ext==".xls":
        p.Value='calc_pdf_Export'
    elif ext==".tif":
        p.Value='draw_pdf_Export'
    elif ext==".tiff":
        p.Value='draw_pdf_Export'
    properties.append(p)
    return tuple(properties)

def _ghostscript_convert_to_tiff(self, docSource):
    dest, source=self._get_dest_and_source_conversion_file(docSource)
    try:
        command = ' '.join([
            self._ghostscriptPath + 'gswin32c.exe',
           '-q',
           '-dNOPAUSE',
           '-dBATCH',
           '-r500',
           '-sDEVICE=tiffg4',
           '-sPAPERSIZE=a4',
           '-sOutputFile=%s %s' % (dest, source),
           ])
        self._execute_ghostscript(command)
        self.convertedTifDocList.append(dest)
    except OSError, e:
        self.logger.info(e)
        raise e
    except TypeError, (e):
        raise e
    except AttributeError, (e):
        raise e
    except:
        raise

[/ code]

War es hilfreich?

Lösung

Die eklige Lösung ist einen Monitor für den Openoffice-Prozess. Wenn Ihr Monitor die PID und hat Privilegien kennt, kann er die CPU-Zeit alle paar Sekunden gewöhnen. Wenn OO in einem Zustand zum Stillstand gekommen (nicht mehr CPU) hängt, dann kann der Monitor sie tötet.

Der einfachste Weg, dies zu umgehen ist es, den „Wrapper“ haben, die sie von der offenen Büro Aufgabe Brennen anschauen, während es läuft und töten, wenn es hängt. Der Elternprozess hat sowieso Wartezeit zu tun, so kann es auch überwachen.

Wenn OpenOffuce in einer Schleife hängt, dann ist es schwieriger zu erkennen. CPU in die Regel geht durch das Dach, bleibt dort, und die Priorität sinkt auf die niedrigsten mögliche Priorität. Die Verarbeitung oder aufgehängt? Gewissensentscheidung. Sie müssen es, wie dies für „eine Weile“ hängen lassen (eine zufällige Dauer, 432 Sekunden (3 Dutzende Dutzende) zum Beispiel wählen, Sie immer zweiter Mutmaßung sein werden selbst.)

Andere Tipps

OpenOffice.org hat einen "-headless" Parameter es ohne GUI zu laufen. Ich bin nicht sicher, ob dies tatsächlich alle Ressourcen freigibt, die auf GUI ausgegeben würde. Hier ist, wie ich meine serverseitige kopflos Instanz ausgeführt:

soffice -headless -accept="socket,port=1234;urp" -display :25

Ich kann nicht sagen, was für Ihren Python-Skript, die ein Abwürgen Probleme verursacht, aber möchten Sie vielleicht zu prüfen,

scroll top