【问题标题】:Ghostscript api requesting "press <return> to continue"Ghostscript api 请求“按 <return> 继续”
【发布时间】: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


    【解决方案1】:

    尝试使用 -dFirstPage=1 -dLastPage=1 和 -dNOPAUSE -dBATCH。然后它只处理第一页。

    否则您将不得不拦截按下任意键并中断该过程,或者修改设备以在第一页之后抛出错误或其他内容。

    注意虽然您可以将这些开关用于除 PDF 之外的其他类型的输入,但它们仍然必须处理整个输入文件,因为与 PDF 不同,没有简单的方法可以找到第 n 个PostScript 或 PCL 文件中的页面。

    【讨论】:

    • 我在使用 gs 将 ps 转换为 pdf 时遇到了类似的问题。如果我设置 -dFirstPage=1 -dLastPage=1 和 -dNOPAUSE -dBATCH 则输出文件为空。你能帮我解决吗?
    • 不形成该信息,不。您没有说明操作系统、Ghostscript 的版本或给出示例文件。
    • GPL Ghostscript 9.19,我在我的安卓应用程序中使用它。
    • 好吧,我们没有 android 版本,这意味着您要自己构建它(请确保您遵守 AGPL 的条款)。这意味着我无法调查它。如果你能在 Windows、Linux 或 OS/X 上重现它,我可以看看。当然,我还需要一个示例文件和完整的命令行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 2021-10-01
    • 1970-01-01
    • 2013-09-21
    • 2020-07-21
    • 1970-01-01
    相关资源
    最近更新 更多