Skip to content

Instantly share code, notes, and snippets.

@AllanRPereira
Created February 15, 2020 16:19
Show Gist options
  • Save AllanRPereira/714a3a72dad9e32af03235aee3eae9ff to your computer and use it in GitHub Desktop.
Save AllanRPereira/714a3a72dad9e32af03235aee3eae9ff to your computer and use it in GitHub Desktop.
from sh import lp, lpstat, lpoptions, lpq
class APICups:
self.cupsOptions = {
"media" : ["Size of the paper", ["Letter", 'Legal ', 'A4 ', 'COM10 ', 'DL ', 'Transparency ', 'Upper ', 'Lower', 'MultiPurpose','LargeCapacity', "Custom.WIDTHxLENGTH"]],
"orientation" : ["Orientation of printing",
["landscape", "portrait",
["orientation-requested",
["Reverse Landscape", 5, "Reverse Portrait", 6]]]],
"sides" : ["Sides of the paper",
["two-sided-short-edge", "two-sided-long-edge", "one-sided"]],
"job-sheets" : ["Banner of the page",
["none", "classified", "confidential", "secret", "standart", "topsecret", "unclassified"]],
"job-hold-until" : ["Define the time to job will be make",
["indefinitive", "day-time", "night", "second-shift", "third-shift", "weekend", "HH:MM"]],
"job-priorit" : ["Defini priority of the job"],
"outputorder" : ["Order of exit pages", ["normal", "reverse"]],
"page-ranges" : ["Specificed a range of pages to print"],
"number-ip" : ["Choose a number of pages impress in one page",
[1,2,4,6,9,16]],
"page-border" : ["Choose border to draw around each page",
["double", "double-thick", "none", "single", "single-thick"]],
"number-up-layout" : ["Align of the page in the paper",
["bottom", "top", "left", "right"]],
"fit-to-page" : ["Scaling file for the page"],
"mirror" : ["Printing mirror pages"]
}
def __init__(self, filename, options=[]):
self.filename = filename
self.options = options
self.printer_avaliable = ""
self.dictionary_options = ""
def impress(self):
try:
arguments = [f"-o {arg}" for arg in self.options]
arguments.append(self.filename)
lp(arguments)
except Exception as error:
return error
def getPrinter(self):
command_return = lpstat("-p", "-d")
command_return = command_return.split("\n")
impress_list = [line.split(" ")[1] for line in command_return[1::-1]]
self.printer_avaliable = impress_list
return impress_list
def checkPrinter(self, printer):
if self.printer_avaliable == "":
self.printer_avaliable == self.getPrinter()
if printer not in self.printer_avaliable:
return "This printer not avaliable in your system, try getPrinter() function to see the avaliable printers"
else:
return True
def setDefaultPrinter(self, printer):
if self.checkPrinter(printer):
lpoptions("-d", printer)
return f"Printer: {printer} is now default!"
def getPrinterOptions(self, printer):
if self.checkPrinter:
all_brute_options = lpoptions("-p", printer, "-l").split("\n")
all_brute_options = all_brute_options.split(":")
map_options = map(all_brute_options[0::2], all_brute_options[1::2])
self.dictionary_options = dict(map_options)
return self.dictionary_options
def getJobsList(self):
"""
Working for a only printer!
"""
result = lpq().split("\n")
all_workings = {}
all_workings["Printer"] = result[0].split(" ")[0]
jobs_id_list = [lista.split(" ") for lista in result[2::]]
jobs_list = [list(set(jobs_id_list)) for job in jobs_id_list]
all_workings["Order"] = [job[0] for job in jobs_list]
all_workings["Owner"] = [job[1] for job in jobs_list]
all_workings["Jobs ID"] = [job[2] for job in jobs_list]
all_workings["Filename"] = [job[3] for job in jobs_list]
return all_workings
def startJobId(self, job_id):
return lp("-i", job_id, "-H", "resume")
"""
Guide to Help (Portuguese)
Print diretamente para a impressora
lp filename || lpr filename
Mostrar as impressoras disponíveis
lpstat -p -d
-p == impressoras
-d == a default
Escolhendo uma impressora como default
lpoptions -d impressora
Imprimir diretamente da saída de um programa
program | lp
program | lp -d printer
program | lpr
program | lpr -P printer
Especificar a forma de impressão
lp -o landscape -o fit-to-page -o media=A4 filename.jpg
lpr -o landscape -o fit-to-page -o media=A4 filename.jpg
Ver as opções de uma impressora
lpoptions -p printer -l
Criar opções salvas impressora
lpoptions -p printer/instance -o name=value ...
Imprimir muitas cópias
lp -n num-copies filename
lpr -#num-copies filename
Cancelar uma impressão
cancel job-id
lprm job-id
Obter job-id
lpq
lpstat
Mover trabalho para outra impressora
lpmove job-id destination
Selecionar as especificações da impressão
lp -o media=Letter filename
lp -o media=Letter,MultiPurpose filename
lpr -o media=Letter,Transparency filename
lpr -o media=Letter,MultiPurpose,Transparency filename
Selecionar o tamanho da folha
lp -o media=Custom.WIDTHxLENGTH filename
lp -o media=Custom.WIDTHxLENGTHin filename
lp -o media=Custom.WIDTHxLENGTHcm filename
lp -o media=Custom.WIDTHxLENGTHmm filename
Orientações da página
lp -o landscape filename
lpr -o landscape filename
-o orientation-requested=N option rotates the page depending on the value of N:
-o orientation-requested=3 - portrait orientation (no rotation)
-o orientation-requested=4 - landscape orientation (90 degrees)
-o orientation-requested=5 - reverse landscape or seascape orientation (270 degrees)
-o orientation-requested=6 reverse portrait or upside-down orientation (180 degrees)
-o job-hold-until=when option tells CUPS to delay printing until the "when" time, which can be one of the following:
-o job-hold-until=indefinite; print only after released by the user or an administrator
-o job-hold-until=day-time; print from 6am to 6pm local time
-o job-hold-until=night; print from 6pm to 6am local time
-o job-hold-until=second-shift; print from 4pm to 12am local time
-o job-hold-until=third-shift; print from 12am to 8am local time
-o job-hold-until=weekend; print on Saturday or Sunday
-o job-hold-until=HH:MM; print at the specified UTC time
Acionar trabalho indefinite
lp -i job-id -H resume
Nível de Prioridade
-o job-priority=NNN
Páginas Específicas
lp -o page-ranges=1 filename
lp -o page-ranges=1-4 filename
Páginas por folha
lp -o number-up=1 filename
lp -o number-up=2 filename
Bordas nas páginas
-o page-border=value
Alinhamento na página
-o number-up-layout=btlr
Corte de página
lp -o fit-to-page filename
Ordem de impressão
lp -o outputorder=reverse filename
lpr -o outputorder=reverse filename
"""
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment