php - LibreOffice 无法同时从 DOCX 生成 PDF 文件
php - LibreOffice stuck generating PDF file from DOCX at the same time
我遇到一个问题,当我使用 LibreOffice (soffice.exe) 同时转换 2 个 docx 文件时,LibreOffice 挂起。同时转换 xslx (Excel) 文件时不会发生这种情况。
我的代码:
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");
我做了一些挖掘,我认为这可能是因为 LibreOffice 生成的临时文件在同时转换 2 个 docx 文件时具有相同的名称,所以它乱七八糟。这只是一个假设。
我需要修复程序或与 LibreOffice 一样好的替代方案。
谢谢。
不要同时转换两个文件。
我过去所做的是使 PHP 脚本将文件放置在轮询目录中。编写一个 daemon(可以是一个简单的 shell 脚本或更复杂的东西,例如 Java)轮询该目录以查找传入的作业,当它看到作业时,它会将它们提供给 LibreOffice 一个一次,将结果发送到输出目录。
同时,PHP 脚本在输出目录中等待结果。
另一种选择是将文件用作 lock。 PHP 脚本会在 运行 作业之前创建一个 0 字节的文件。如果该文件已经存在,请等待它消失后再使用 LibreOffice 进行转换,因为另一个作业可能正在 运行ning。转换后,删除文件,以便下一个工作可以运行。
根据 link:
PHP provides a file based locking as well as a Mutex class in the pthreads extension.
根据我的经验,使用锁定文件是一种脆弱的设置,因为如果一个作业出错,一切都会卡住。但是,Java 守护程序可以使用线程进行编程,这样如果出现问题,它仍然可以继续运行。
LibreOffice 主要是为用户交互而设计的。我相信有基于命令行的工具可以进行此类转换,尽管我没有任何经验。
我遇到一个问题,当我使用 LibreOffice (soffice.exe) 同时转换 2 个 docx 文件时,LibreOffice 挂起。同时转换 xslx (Excel) 文件时不会发生这种情况。
我的代码:
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");
我做了一些挖掘,我认为这可能是因为 LibreOffice 生成的临时文件在同时转换 2 个 docx 文件时具有相同的名称,所以它乱七八糟。这只是一个假设。
我需要修复程序或与 LibreOffice 一样好的替代方案。
谢谢。
不要同时转换两个文件。
我过去所做的是使 PHP 脚本将文件放置在轮询目录中。编写一个 daemon(可以是一个简单的 shell 脚本或更复杂的东西,例如 Java)轮询该目录以查找传入的作业,当它看到作业时,它会将它们提供给 LibreOffice 一个一次,将结果发送到输出目录。
同时,PHP 脚本在输出目录中等待结果。
另一种选择是将文件用作 lock。 PHP 脚本会在 运行 作业之前创建一个 0 字节的文件。如果该文件已经存在,请等待它消失后再使用 LibreOffice 进行转换,因为另一个作业可能正在 运行ning。转换后,删除文件,以便下一个工作可以运行。
根据 link:
PHP provides a file based locking as well as a Mutex class in the pthreads extension.
根据我的经验,使用锁定文件是一种脆弱的设置,因为如果一个作业出错,一切都会卡住。但是,Java 守护程序可以使用线程进行编程,这样如果出现问题,它仍然可以继续运行。
LibreOffice 主要是为用户交互而设计的。我相信有基于命令行的工具可以进行此类转换,尽管我没有任何经验。