私はjythonプログラムをテストしています。これは、["。xls"、 "。doc"、 "。rtf"、 "。tif"、 "。tiff"、"。pdf"ファイル]->pdf(中間ファイル)を実行します。 -> Open Officeを使用したtif(最終出力)変換。自動化に問題があったため、MSOfficeから離れました。ショーストッパーエラーに関連する多くのボトルをノックダウンし、残りのボトルは1本になっているようです。しばらくするとOOがハングします。
コード内でこの行'<<<<<<<<<<<<'が表示されている場合に発生します
行き詰まったOpenOfficeプロセスを処理するための正しい方法は何ですか。役立つリンクを提供していただけませんか。また、途中で良い提案をしてください。
また、もう1つ質問があります。
要約:
*停止したOpen Officeインスタンスを処理する方法は?
* Javaヘッドレスで変換を行う方法。これにより、メモリを浪費するGUIが常にポップアップ表示されることはありません。
*また、コードの品質、最適化、および一般的なコーディング標準に関する一般的な提案をいただければ幸いです。
トレースバック(最も内側の最後):
ファイル "dcmail.py"、行184、?
ファイル"dcmail.py"、行174、メイン
ファイル "C:\ DCMail \ digestemails.py"、行126、process_inbox
ファイル "C:\ DCMail \ digestemails.py"、行258、_convert
ファイル "C: \ DCMail \ digestemails.py "、284行目、_choose_conversion_type
ファイル" C:\ DCMail \ digestemails.py "、287行目、_open_office_convert
ファイル" C:\ DCMail \ digestemails.py "、299行目、_load_attachment_to_convert
com.sun .star.lang.DisposedException:
com.sun.star.lib.uno.bridges.java_remote.java_remote_bridge $ MessageDi spatcher.run(java_remote_bridge.java:176)での java.io.EOFException
com.sun.star.lang.DisposedException:com.sun.star.lang.DisposedException:java.i o.EOFException
この例外をクリアするためだけに、オープンオフィスプロセスを強制終了した場合にのみスローされます。それ以外の場合、プログラムはオープンオフィスが完了するのを待つだけです。無期限に
コード(機能しないコードタグ付き)
[コード]
#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
[/コード]