Ghostscript API 请求"press <return> to continue"
Ghostscript api requesting "press <return> to continue"
我正在使用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"answers"-dBATCH"添加到gsArgumentValues中,但这将导致另一个问题。如果我有非常大的PDF和大量的页面,这将需要很多时间来通过所有页面,只有在那之后它才会返回false。
任何人都知道,当Ghostscript提示返回时,我如何退出进程?在那个阶段,我已经知道PDF不受保护,我可以退出并返回false。
我试过使用回调函数,但没有成功。
提前谢谢。
尝试使用-dFirstPage=1-dLastPage=1和-dNOPAUSE-dBATCH。然后它只处理第一页。
否则,你将不得不拦截按下任意键并中断进程,或者修改设备以在第一页或其他内容后抛出错误。
注意尽管您可以将这些开关与PDF以外的其他类型的输入一起使用,但它们仍然必须处理整个输入文件,因为与PDF不同,在PostScript或PCL文件中没有简单的方法可以找到第n页。
相关文章:
- "error: no matching function for call to"构造函数错误
- 调用专用模板时出错"no matching function for call to [...]"
- C++ Singleton - Prevent ::instance() to variable
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- Visual Studio Code "undefined reference to `WinMain@16'"
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 如何解决"invalid conversion from 'char' to 'const char*'"
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- EASTL矢量<向量<int>>连续的
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- Python str to C++ to Python str
- 为什么创建友元类的实例会导致"undefined reference to"错误?
- System.InvalidCastException - SQL to C++ - safe_cast<float>
- 使用 cmake 的 Linux 终端上的"Conversion to non-scalar type is requested"错误
- "no matching function for call to 'Vector::Vector'"错误
- vector<vector<double>> to mxArray using memcpy
- Tensorflow c++ api undefined reference to 'tflite::D efaultErrorReporter()'
- 当覆盖存在时调用基本虚拟"binded to object"函数
- OpenGL VBO Indexing ( How to compute Index Array)
- 为什么我会" void value not ignored as it ought to be"?