2017-12-07 17 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"); 

내가 뒷조사를했을, 나는이 DOCX를 변환 할 때 LibreOffice와에 의해 생성되는 임시 파일이 같은 이름을 가지고 있기 때문에 아마 생각

파일을 동시에 사용하므로 엉망이됩니다. 이것은 단지 가정 일뿐입니다.

LibreOffice만큼 좋은 픽스 또는 대안이 필요합니다.

감사합니다.

답변

0

두 파일을 동시에 변환하지 마십시오.

내가 과거에 한 것은 PHP 스크립트가 폴링 된 디렉토리에 파일을 저장하도록하는 것입니다. 들어오는 작업에 대해 해당 디렉토리를 폴링하는 daemon (단순한 쉘 스크립트 또는 Java와 같이 더 복잡한 것일 수 있음)을 작성하고 작업을 볼 때 한 번에 하나씩 LibreOffice에 피드를 보내 결과를 출력 디렉토리로 보냅니다.

한편 PHP 스크립트는 출력 디렉토리에서 결과를 기다립니다.

또 다른 옵션은 파일을 lock으로 사용하는 것입니다. PHP 스크립트는 작업을 실행하기 전에 0 바이트 파일을 만듭니다. 파일이 이미 있으면 LibreOffice로 변환하기 전에 파일이 사라질 때까지 기다리십시오. 다른 작업이 실행 중일 수 있습니다. 변환 후에는 다음 작업이 실행될 수 있도록 파일을 h 제하십시오. 링크에 따르면

:

PHP 파일 기반의 잠금뿐만 아니라 pthreads의 확장에 뮤텍스 클래스를 제공합니다.

하나의 작업이 잘못되면 모든 것이 중단되므로 잠금 파일을 사용하는 것이 쉬운 일이 아닙니다. 그러나 Java 데몬은 스레드로 프로그래밍 할 수 있으므로 문제가 있으면 계속 진행할 수 있습니다.

주로 LibreOffice는 사용자 상호 작용을 위해 설계되었습니다. 그러한 전환을 수행하는 데 필요한 명령 행 기반 도구가 있다고 생각합니다. 경험이 없어도 마찬가지입니다.

+0

도움 주셔서 감사합니다. 나는 다른 대답을 위해 좀 더 기다릴 것이고 어떤 것이 없다면 당신은해야 할 것이다. – Badonga