这是通过CUPS获得纸张尺寸的最佳方式吗?

时间:2010-03-20 07:28:08

标签: macos cups ppd

我有一个CUPS作业控制文件(这些可以在/ var / spool / cups / cnnnnn中找到)。我需要得到所印刷的实际尺寸。

这是我想出来的方式:

  1. 使用media属性获取论文名称。 (例如Letter
  2. printer-uri属性获取打印机uri。 (例如ipp://localhost/printers/MyPrinter
  3. 通过将打印机uri传递到IPP_GET_PRINTER_ATTRIBUTES操作并获取printer-name属性来获取打印机名称。 (例如MyPrinter
  4. 获取PPD的路径,将打印机名称传递给cupsGetPPD方法。
  5. 打开PPD,将PPD路径传递给ppdOpenFile方法。
  6. 通过将PPD和纸张名称传递给ppdPageSize方法来获取纸张大小。
  7. 这会有效,但似乎有点迂回。是否有更有效的方式来获得我需要的东西?

2 个答案:

答案 0 :(得分:0)

您实际上可以使用CUPS_GET_PPD请求直接获取ppd而不是步骤3和4.这似乎更有效。

答案 1 :(得分:0)

作业控制文件将包含用于打印的文件的所有作业选项。有3种类型的工作选择:

  1. 用户在命令行上或通过单击某些GUI元素(这些将显示在控制文件中)明确且明确地选择的那些;
  2. 因为它们包含在用户特定的~/.lpoptions或系统范围的/etc/cups/lpoptions文件中而被隐含设置的文件(用户特定文件已迁移到~/.cups/lpoptions在更新版本的CUPS中(这些也将出现在控制文件中);
  3. CUPS通过解析PPD并查找其中包含的默认设置而添加的(这些 出现在控制文件中,因为CUPS仅评估它们在处理作业的那一刻 - 如果您使用-o job-hold-until=indefinite,将来可能是2天。
  4. 如果您知道printqueuename和使用的cupsserver,您可以使用以下两个命令查询该组合的默认队列设置:

    lpoptions -h cupsserver \
              -U username \
              -d printqueuename
    

    这将返回(.)loptions文件中所述的所有当前设置。

    lpoptions -h cupsserver \
              -U username \
              -d printqueuename \
              -l
    

    这将返回PPD中包含的所有用户可选设置。请注意星号*如何标记每个选项的默认设置。另请注意,此处-U username非常重要 - 不同的用户可能会使用不同的默认设置...

    现在请注意这些命令的结果,注意PageSize使用过的......