代码之家  ›  专栏  ›  技术社区  ›  Redwood

这是通过杯子获得纸张大小的最佳方法吗?

  •  0
  • Redwood  · 技术社区  · 14 年前

    我有一个CUPS作业控制文件(可以在/var/spool/CUPS/cnnn上找到)。我需要得到印刷品的实际尺寸。

    我就是这么想的:

    1. 使用 media 属性(例如:。 Letter )
    2. printer-uri 属性(例如:。 ipp://localhost/printers/MyPrinter )
    3. 通过将打印机uri传递给 IPP_GET_PRINTER_ATTRIBUTES 操作和获取 printer-name 属性(例如:。 MyPrinter )
    4. 获取PPD的路径,将打印机名称传递给 cupsGetPPD 方法
    5. 打开PPD,将PPD路径传递到 ppdOpenFile 方法
    6. 通过将PPD和纸张名称传递给 ppdPageSize 方法

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

    2 回复  |  直到 14 年前
        1
  •  1
  •   Kurt Pfeifle    14 年前

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

    1. 用户在命令行上或通过单击某些GUI元素(这些元素将出现在控制文件中)明确选择的元素;
    2. 由于包含在特定于用户的文件中并从中读取而隐式设置的文件 ~/.lpoptions 或者整个系统 /etc/cups/lpoptions 文件(特定于用户的文件已迁移到 ~/.cups/lpoptions 在CUPS的最新版本中(这些版本也将出现在控制文件中);
    3. CUPS通过解析PPD并查找其中包含的默认设置而添加的(这些将 出现在控制文件中,因为CUPS只在处理作业时对其进行评估——如果使用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 习惯于

        2
  •  0
  •   Redwood    14 年前

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