2017-12-07 13 views
0

LibreOffice(soffice.exe)を使用して2つのdocxファイルを同時に変換すると、LibreOfficeがハングするという問題があります。これは、xslx(Excel)ファイルを同時に変換するときには発生しません。php - LibreOfficeが同時にDOCXからPDFファイルを生成していません

マイコード:

exec("C:/LibreOfficePortable/App/libreoffice/program/soffice.exe -headless -convert-to pdf:writer_pdf_Export -outdir C:\convertTest\ C:\convertTest\l06.docx"); 

exec("C:/LibreOfficePortable/App/libreoffice/program/soffice.exe -headless -convert-to pdf:writer_pdf_Export -outdir C:\convertTest\ C:\convertTest\l07.docx"); 

私はいくつかの掘削を行っている、と私は2 docxファイルを変換する際はLibreOfficeによって生成された一時ファイルは、同じ名前を持っているので、それはおそらくだと思います同時にファイルに変換されます。しかしこれはまさに前提です。

私はLibreOfficeと同じくらい良い修正プログラムまたは代替プログラムが必要です。

ありがとうございました。

答えて

0

2つのファイルを同時に変換しないでください。

私が過去に行ったことは、PHPスクリプトをポーリングされたディレクトリに置くことです。入ってくるジョブのためにそのディレクトリをポーリングするdaemon(単純なシェルスクリプトかJavaのようなもっと複雑なものかもしれません)を書いてください。そしてジョブを見ると、一度に1つずつLibreOfficeにフィードし、結果を出力ディレクトリに送ります。

PHPスクリプトは出力ディレクトリに結果を待っています。

もう1つの方法は、ファイルをlockとして使用することです。 PHPスクリプトはジョブを実行する前に0バイトのファイルを作成します。ファイルがすでに存在する場合は、別のジョブが実行されている可能性があるため、LibreOfficeで変換する前にファイルが消えるのを待ちます。変換後、次のジョブが実行できるようにファイルを削除します。リンクによる

PHPはpthreadの拡張子でファイルベースのロックならびにミューテックスクラスを提供します。

私の経験では、ロックファイルを使用するのは脆弱な設定です.1つのジョブがうまくいかないとすべてが止まってしまうからです。しかし、Javaデーモンはスレッドでプログラミングすることができます。問題が発生しても、Javaデーモンは継続して実行できます。

LibreOfficeは、主にユーザーとのやりとりのために設計されています。そのような変換を行うためのコマンドラインベースのツールがあると信じていますが、経験はありません。

+0

ありがとうございます。私は他の答えのためにもう少しお待ちしており、何もない場合は、あなたがしなければならないでしょう。 – Badonga

関連する問題