Advertisement
AllanRocha

CUPS Integration [Minimal]

Feb 15th, 2020
701
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.95 KB | None | 0 0
  1. from sh import lp, lpstat, lpoptions, lpq
  2.  
  3. class APICups:
  4.  
  5.     self.cupsOptions = {
  6.         "media" : ["Size of the paper", ["Letter", 'Legal ', 'A4 ', 'COM10 ', 'DL ', 'Transparency ', 'Upper ', 'Lower', 'MultiPurpose','LargeCapacity', "Custom.WIDTHxLENGTH"]],
  7.         "orientation" : ["Orientation of printing",
  8.             ["landscape", "portrait",
  9.                 ["orientation-requested",
  10.                     ["Reverse Landscape", 5, "Reverse Portrait", 6]]]],
  11.  
  12.         "sides" : ["Sides of the paper",
  13.                     ["two-sided-short-edge", "two-sided-long-edge", "one-sided"]],
  14.         "job-sheets" : ["Banner of the page",
  15.                         ["none", "classified", "confidential", "secret", "standart", "topsecret", "unclassified"]],
  16.         "job-hold-until" : ["Define the time to job will be make",
  17.                             ["indefinitive", "day-time", "night", "second-shift", "third-shift", "weekend", "HH:MM"]],
  18.  
  19.         "job-priorit" : ["Defini priority of the job"],
  20.         "outputorder" : ["Order of exit pages", ["normal", "reverse"]],
  21.         "page-ranges" : ["Specificed a range of pages to print"],
  22.         "number-ip" : ["Choose a number of pages impress in one page",
  23.                         [1,2,4,6,9,16]],
  24.         "page-border" : ["Choose border to draw around each page",
  25.                             ["double", "double-thick", "none", "single", "single-thick"]],
  26.         "number-up-layout" : ["Align of the page in the paper",
  27.                                 ["bottom", "top", "left", "right"]],
  28.         "fit-to-page" : ["Scaling file for the page"],
  29.         "mirror" : ["Printing mirror pages"]
  30.     }  
  31.  
  32.  
  33.     def __init__(self, filename, options=[]):
  34.         self.filename = filename
  35.         self.options = options
  36.         self.printer_avaliable = ""
  37.         self.dictionary_options = ""
  38.    
  39.     def impress(self):
  40.         try:
  41.             arguments = [f"-o {arg}" for arg in self.options]
  42.             arguments.append(self.filename)
  43.             lp(arguments)
  44.  
  45.         except Exception as error:
  46.             return error
  47.        
  48.     def getPrinter(self):
  49.  
  50.         command_return = lpstat("-p", "-d")
  51.         command_return = command_return.split("\n")
  52.         impress_list = [line.split(" ")[1] for line in command_return[1::-1]]
  53.  
  54.         self.printer_avaliable = impress_list
  55.  
  56.         return impress_list
  57.  
  58.     def checkPrinter(self, printer):
  59.         if self.printer_avaliable == "":
  60.             self.printer_avaliable == self.getPrinter()
  61.  
  62.         if printer not in self.printer_avaliable:
  63.             return "This printer not avaliable in your system, try getPrinter() function to see the avaliable printers"
  64.         else:
  65.             return True
  66.  
  67.     def setDefaultPrinter(self, printer):
  68.  
  69.         if self.checkPrinter(printer):
  70.             lpoptions("-d", printer)
  71.             return f"Printer: {printer} is now default!"
  72.  
  73.     def getPrinterOptions(self, printer):
  74.  
  75.         if self.checkPrinter:
  76.             all_brute_options = lpoptions("-p", printer, "-l").split("\n")
  77.             all_brute_options = all_brute_options.split(":")
  78.             map_options = map(all_brute_options[0::2], all_brute_options[1::2])
  79.             self.dictionary_options = dict(map_options)
  80.  
  81.             return self.dictionary_options
  82.  
  83.     def getJobsList(self):
  84.         """
  85.        Working for a only printer!
  86.        """
  87.  
  88.         result = lpq().split("\n")
  89.        
  90.         all_workings = {}
  91.         all_workings["Printer"] = result[0].split(" ")[0]
  92.  
  93.         jobs_id_list = [lista.split(" ") for lista in result[2::]]
  94.         jobs_list = [list(set(jobs_id_list)) for job in jobs_id_list]
  95.        
  96.         all_workings["Order"] = [job[0] for job in jobs_list]
  97.         all_workings["Owner"] = [job[1] for job in jobs_list]
  98.         all_workings["Jobs ID"] = [job[2] for job in jobs_list]
  99.         all_workings["Filename"] = [job[3] for job in jobs_list]
  100.  
  101.         return all_workings
  102.        
  103.     def startJobId(self, job_id):
  104.  
  105.         return lp("-i", job_id, "-H", "resume")
  106.  
  107.  
  108.  
  109. """
  110. Guide to Help (Portuguese)
  111.  
  112. Print diretamente para a impressora
  113.  
  114. lp filename || lpr filename
  115.  
  116. Mostrar as impressoras disponíveis
  117.  
  118. lpstat -p -d
  119.  
  120. -p == impressoras
  121.  
  122. -d == a default
  123.  
  124. Escolhendo uma impressora como default
  125.  
  126. lpoptions -d impressora
  127.  
  128. Imprimir diretamente da saída de um programa
  129.  
  130. program | lp
  131. program | lp -d printer
  132. program | lpr
  133. program | lpr -P printer
  134.  
  135. Especificar a forma de impressão
  136.  
  137. lp -o landscape -o fit-to-page -o media=A4 filename.jpg
  138. lpr -o landscape -o fit-to-page -o media=A4 filename.jpg
  139.  
  140. Ver as opções de uma impressora
  141.  
  142. lpoptions -p printer -l
  143.  
  144. Criar opções salvas impressora
  145.  
  146. lpoptions -p printer/instance -o name=value ...
  147.  
  148. Imprimir muitas cópias
  149.  
  150. lp -n num-copies filename
  151. lpr -#num-copies filename
  152.  
  153. Cancelar uma impressão
  154.  
  155. cancel job-id
  156. lprm job-id
  157.  
  158. Obter job-id
  159.  
  160. lpq
  161. lpstat
  162.  
  163. Mover trabalho para outra impressora
  164.  
  165. lpmove job-id destination
  166.  
  167. Selecionar as especificações da impressão
  168.  
  169. lp -o media=Letter filename
  170. lp -o media=Letter,MultiPurpose filename
  171. lpr -o media=Letter,Transparency filename
  172. lpr -o media=Letter,MultiPurpose,Transparency filename
  173.  
  174. Selecionar o tamanho da folha
  175.  
  176. lp -o media=Custom.WIDTHxLENGTH filename
  177. lp -o media=Custom.WIDTHxLENGTHin filename
  178. lp -o media=Custom.WIDTHxLENGTHcm filename
  179. lp -o media=Custom.WIDTHxLENGTHmm filename
  180.  
  181. Orientações da página
  182.  
  183. lp -o landscape filename
  184. lpr -o landscape filename
  185.  
  186. -o orientation-requested=N option rotates the page depending on the value of N:
  187.  
  188.    -o orientation-requested=3 - portrait orientation (no rotation)
  189.    -o orientation-requested=4 - landscape orientation (90 degrees)
  190.    -o orientation-requested=5 - reverse landscape or seascape orientation (270 degrees)
  191.    -o orientation-requested=6 reverse portrait or upside-down orientation (180 degrees)
  192.  
  193. -o job-hold-until=when option tells CUPS to delay printing until the "when" time, which can be one of the following:
  194.  
  195.    -o job-hold-until=indefinite; print only after released by the user or an administrator
  196.    -o job-hold-until=day-time; print from 6am to 6pm local time
  197.    -o job-hold-until=night; print from 6pm to 6am local time
  198.    -o job-hold-until=second-shift; print from 4pm to 12am local time
  199.    -o job-hold-until=third-shift; print from 12am to 8am local time
  200.    -o job-hold-until=weekend; print on Saturday or Sunday
  201.    -o job-hold-until=HH:MM; print at the specified UTC time
  202.  
  203. Acionar trabalho indefinite
  204.  
  205. lp -i job-id -H resume
  206.  
  207. Nível de Prioridade
  208.  
  209. -o job-priority=NNN
  210.  
  211. Páginas Específicas
  212.  
  213. lp -o page-ranges=1 filename
  214. lp -o page-ranges=1-4 filename
  215.  
  216. Páginas por folha
  217.  
  218. lp -o number-up=1 filename
  219. lp -o number-up=2 filename
  220.  
  221. Bordas nas páginas
  222.  
  223. -o page-border=value
  224.  
  225. Alinhamento na página
  226.  
  227. -o number-up-layout=btlr
  228.  
  229. Corte de página
  230.  
  231. lp -o fit-to-page filename
  232.  
  233. Ordem de impressão
  234.  
  235. lp -o outputorder=reverse filename
  236. lpr -o outputorder=reverse filename
  237.  
  238. """
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement