Qt - pdftocairo pdf转换过程在应用程序自动启动时不起作用
Posted
技术标签:
【中文标题】Qt - pdftocairo pdf转换过程在应用程序自动启动时不起作用【英文标题】:Qt - pdftocairo pdf conversion process not working when application on auto start 【发布时间】:2018-01-25 17:37:30 【问题描述】:我在 ARM/嵌入式 linux 平台上运行我的 Qt(4.8、QWS 服务器、QWidget 应用程序)应用程序。在我的应用程序中,我有一个模块/小部件来查看 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
自动启动时,我通过添加&>/opt/log.txt
将应用程序放入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""
感谢任何帮助。在此先感谢:)
【问题讨论】:
【参考方案1】:显然问题是在工作目录中无法识别该命令(仅在出于某种原因自动启动时)。当使用Qprocess
时,即使文件/命令存在于环境变量中,给出路径总是好的——就像我的情况($PATH
)。
我不得不将QString
替换为:
QString PDFString = "/usr/local/bin//pdftocairo -jpeg -r 200 \"/media/usb/" + CacheName + ".pdf\" \"/opt/.pdf/" + CacheName + "\"";
【讨论】:
以上是关于Qt - pdftocairo pdf转换过程在应用程序自动启动时不起作用的主要内容,如果未能解决你的问题,请参考以下文章