1

我有一个 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. 获取将打印机名称传递给cupsGetPPD方法的 PPD 的路径。
  5. 打开 PPD,将 PPD 的路径传递给ppdOpenFile方法。
  6. 通过将 PPD 和纸张名称传递给ppdPageSize方法来获取纸张大小。

这将起作用,但它似乎有点迂回。有没有更有效的方法来获得我需要的东西?

4

2 回答 2

1

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

  1. 由用户在命令行或单击某些 GUI 元素(这些将出现在控制文件中)明确和明确选择的那些;
  2. 那些被隐式设置的,因为它们包含在用户特定~/.lpoptions或系统范围的/etc/cups/lpoptions文件中并从中读取(用户特定文件已迁移到~/.cups/lpoptions较新版本的 CUPS 中(这些文件也将出现在控制文件中);
  3. CUPS 通过解析 PPD 并查找其中包含的默认设置添加的那些(这些将不会出现在控制文件中,因为 CUPS 仅在处理作业的那一刻评估它们——这可能是未来 2 天如果你用过-o job-hold-until=indefinite.

如果您知道使用的 printqueuename 和 cupsserver,则可以使用以下两个命令查询该组合的默认队列设置:

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

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

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

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

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

于 2010-06-24T18:21:15.530 回答
0

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

于 2010-03-31T00:47:22.597 回答