【问题标题】:Is this the best way to get the size of a Paper via CUPS?这是通过 CUPS 获得纸张大小的最佳方法吗?
【发布时间】:2011-01-29 18:02:23
【问题描述】:

我有一个 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 方法来获取纸张大小。

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

【问题讨论】:

    标签: macos cups ppd


    【解决方案1】:

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

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

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

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多