【发布时间】:2014-09-12 11:03:24
【问题描述】:
我正在使用 GhostScript API 来测试 PDF 是否受用户密码保护(只有拥有密码才能打开文档,这与仅保护内容免受未经授权的复制或打印的所有者保护不同)
我在 Qt 中使用此代码:
const bool PDFTools::isUserProtected(const QString &iFilePath)
{
void *minst;
const QString filePath = iFilePath.toUtf8();
const std::string inputFile = QString( "%1" ).arg(filePath).toStdString();
int initiationCode = 0;
int executionCode = 0;
// GhostScript arguments
const int gsArgumentCount = 2;
char * gsArgumentValues[gsArgumentCount];
gsArgumentValues[0] = "-dNODISPLAY";
gsArgumentValues[1] = const_cast<char*>( inputFile.c_str() );
initiationCode = gsapi_new_instance(&minst, NULL);
if(initiationCode < 0)
return true;
initiationCode = gsapi_set_arg_encoding(minst, GS_ARG_ENCODING_UTF8);
if (initiationCode < 0)
{
gsapi_delete_instance(minst);
return true;
}
executionCode = gsapi_init_with_args(minst, gsArgumentCount, gsArgumentValues);
if(executionCode < 0)
{
gsapi_exit(minst);
gsapi_delete_instance(minst);
return true;
}
gsapi_exit(minst);
gsapi_delete_instance(minst);
return false;
}
当文档受到保护时,它返回true,因为没有密码就无法打开,并且Ghostscript返回执行错误,这没关系。
问题是当文档不受保护时,它会打开第一页并一直等待按下返回键,以便可以转到下一页。
>>showpage, press <return> to continue<<
您可以将“-dNOPAUSE”和“-dBATCH”添加到 gsArgumentValues,但这会导致另一个问题。如果我有大量页面的非常大的 PDF,这将需要很长时间才能通过所有页面,然后才会返回 false。
任何人都知道当 Ghostscript 提示返回时如何退出该过程?在那个阶段我已经知道 PDF 不受保护,我可以退出并返回 false。
我尝试了回调函数,但没有成功。
提前致谢。
【问题讨论】:
标签: c++ qt api pdf ghostscript