Qt - pdftocairo pdf 转换过程在应用程序自动启动时不起作用
Qt - pdftocairo pdf conversion process not working when application on auto start
我是 运行 我在 ARM/embedded linux 平台上的 Qt(4.8、QWS 服务器、QWidget 应用程序)应用程序。在我的应用程序中,我有一个 module/widget 来查看 PDF 文件。
作为较慢的处理器,最好使用 pdftocairo
将 PDF 文件转换为图像文件。该模块还具有从闪存驱动器导入任何 pdf 文件并使用 pdftocairo
将其转换为图像的功能。当我从命令行手动启动应用程序时,整个模块按预期工作。下面是将pdf文件以图片形式导入设备的代码:
QString CacheName = PDFList->currentItem()->text(); //name of PDF file without ".pdf"
QString PDFString = "pdftocairo -jpeg -r 200 \"/media/usb/" + CacheName + ".pdf\" \"/opt/.pdf/" + CacheName + "\"";
qDebug() << PDFString;
QProcess PDFCacheprocess;
PDFCacheprocess.startDetached(PDFString); //or PDFCacheprocess.start(PDFString)
该项目的最终目标是让应用程序在设备启动时自动启动。但是,当自动启动应用程序时,导入功能似乎没有任何作用。我对无法识别问题感到难过,因为我没有任何调试输出(正常执行应用程序时我确实有)。
我通常使用
手动执行应用程序
/opt/[path]/[application name] -qws
自动启动时,我将应用程序放入文件中,log.txt
添加 &>/opt/log.txt
。输出好像和我手动命令运行时一样。这是导入过程中的文件内容(没有报错)。
"pdftocairo -jpeg -r 200 "/media/usb/manual.pdf" "/opt/.pdf/manual"
奇怪的是,所有其他命令(pdftocairo
除外)都在工作。我试图用 QString PDFString = "/opt/./importPDF.sh"
替换此命令。该脚本正在为任何命令(如 reboot
)执行,但同样,如果它包含 pdftocairo
命令,它将失败。
我还尝试添加一个连接到 QProcess::finished(int)
的插槽以显示 QProcess
输出:
connect(&PDFCacheprocess, SIGNAL(finished(int)), this, SLOT(pdfImportStatus(int)));
void UserManual::pdfImportStatus(int)
{
qDebug()<<PDFCacheprocess.errorString()<<'\t'<<PDFCacheprocess.exitCode();
}
对于手动执行(导入有效时),我会得到:
"pdftocairo -jpeg -r 200 "/media/usb/manual.pdf" "/opt/.pdf/manual""
"Unknown error" 0
对于自动启动,log.txt
只显示这个(好像插槽没有被触发?)
"pdftocairo -jpeg -r 200 "/media/usb/manual.pdf" "/opt/.pdf/manual""
感谢任何帮助。提前致谢:)
显然问题是在工作目录中无法识别该命令(仅当出于某种原因自动启动时)。当使用 Qprocess
时,事实证明,即使环境变量中存在 file/command,给出路径总是好的 - 正如我的情况 ($PATH
).
我不得不将 QString
替换为:
QString PDFString = "/usr/local/bin//pdftocairo -jpeg -r 200 \"/media/usb/" + CacheName + ".pdf\" \"/opt/.pdf/" + CacheName + "\"";
我是 运行 我在 ARM/embedded linux 平台上的 Qt(4.8、QWS 服务器、QWidget 应用程序)应用程序。在我的应用程序中,我有一个 module/widget 来查看 PDF 文件。
作为较慢的处理器,最好使用 pdftocairo
将 PDF 文件转换为图像文件。该模块还具有从闪存驱动器导入任何 pdf 文件并使用 pdftocairo
将其转换为图像的功能。当我从命令行手动启动应用程序时,整个模块按预期工作。下面是将pdf文件以图片形式导入设备的代码:
QString CacheName = PDFList->currentItem()->text(); //name of PDF file without ".pdf"
QString PDFString = "pdftocairo -jpeg -r 200 \"/media/usb/" + CacheName + ".pdf\" \"/opt/.pdf/" + CacheName + "\"";
qDebug() << PDFString;
QProcess PDFCacheprocess;
PDFCacheprocess.startDetached(PDFString); //or PDFCacheprocess.start(PDFString)
该项目的最终目标是让应用程序在设备启动时自动启动。但是,当自动启动应用程序时,导入功能似乎没有任何作用。我对无法识别问题感到难过,因为我没有任何调试输出(正常执行应用程序时我确实有)。
我通常使用
手动执行应用程序/opt/[path]/[application name] -qws
自动启动时,我将应用程序放入文件中,log.txt
添加 &>/opt/log.txt
。输出好像和我手动命令运行时一样。这是导入过程中的文件内容(没有报错)。
"pdftocairo -jpeg -r 200 "/media/usb/manual.pdf" "/opt/.pdf/manual"
奇怪的是,所有其他命令(pdftocairo
除外)都在工作。我试图用 QString PDFString = "/opt/./importPDF.sh"
替换此命令。该脚本正在为任何命令(如 reboot
)执行,但同样,如果它包含 pdftocairo
命令,它将失败。
我还尝试添加一个连接到 QProcess::finished(int)
的插槽以显示 QProcess
输出:
connect(&PDFCacheprocess, SIGNAL(finished(int)), this, SLOT(pdfImportStatus(int)));
void UserManual::pdfImportStatus(int)
{
qDebug()<<PDFCacheprocess.errorString()<<'\t'<<PDFCacheprocess.exitCode();
}
对于手动执行(导入有效时),我会得到:
"pdftocairo -jpeg -r 200 "/media/usb/manual.pdf" "/opt/.pdf/manual""
"Unknown error" 0
对于自动启动,log.txt
只显示这个(好像插槽没有被触发?)
"pdftocairo -jpeg -r 200 "/media/usb/manual.pdf" "/opt/.pdf/manual""
感谢任何帮助。提前致谢:)
显然问题是在工作目录中无法识别该命令(仅当出于某种原因自动启动时)。当使用 Qprocess
时,事实证明,即使环境变量中存在 file/command,给出路径总是好的 - 正如我的情况 ($PATH
).
我不得不将 QString
替换为:
QString PDFString = "/usr/local/bin//pdftocairo -jpeg -r 200 \"/media/usb/" + CacheName + ".pdf\" \"/opt/.pdf/" + CacheName + "\"";