2010-03-20 102 views
0

我有一個CUPS作業控制文件(這些可以在/ var/spool/cups/cnnnnn找到)。我需要獲得所製作的印刷品的實際尺寸。這是通過CUPS獲取紙張大小的最佳方式嗎?

這是我想通了,做的方式:

  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路徑傳遞到ppdOpenFile方法的PPD。
  6. 通過將PPD和紙張名稱傳遞給ppdPageSize方法來獲取紙張大小。

這將工作,但它似乎有點迂迴。有沒有更有效的方式來獲得我需要的東西?

回答

0

您實際上可以使用CUPS_GET_PPD請求直接獲取ppd,而不是步驟3和4.這似乎更有效。

0

作業控制文件將包含用於打印的文件的所有作業選項。有3種類型的作業選項:其中具體地和明確地通過在命令行用戶或通過點擊一些GUI元素中選擇

  1. 酮(這些的將出現在控制文件);
  2. 者這是隱含設置,因爲它們包含在從用戶特定~/.lpoptions或系統範圍/etc/cups/lpoptions文件(用戶特定的文件已經遷移到~/.cups/lpoptions在最近CUPS版本(這些的也會出現讀在控制文件);
  3. 那些這是由CUPS通過分析PPD,尋找默認設置中加入包含有(這些的將不會出現在控制文件,因爲CUPS只在一瞬間評估它們的工作處理 - 如果您使用-o job-hold-until=indefinite,未來可能需要2天

如果你知道printqueuename和使用的cupsserver,你可以用這兩個命令查詢康寶默認隊列設置:

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

這將返回所有當前設置作爲(.)loptions文件指出(S) 。

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

這將返回包含在PPD中的所有用戶可選設置。請注意星號*如何標記每個選項的默認設置。還請注意,-U username在這裏很重要 - 不同的用戶可能會使用不同的默認設置...

現在注意這些命令的結果,注意使用了PageSize ...