1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- import os
- import json
- import textwrap
- from fpdf import FPDF
- from PIL import Image
- import cups
- def add_printers():
- with open('printers/printers.json', 'r', encoding='utf-8') as file:
- printers = json.load(file)
- for printer in printers.items():
- name = printer[0]
- location = printer[1]['Location']
- model = printer[1]['Model']
- domain = printer[1]['Domain']
- os.system(f'lpadmin -p "{name}" -L "{location}" -D "{model}" -E -v http://{domain}')
- def pdf_from_text(text, filename):
- a4_width_mm = 210
- pt_to_mm = 0.35
- fontsize_pt = 11
- fontsize_mm = fontsize_pt * pt_to_mm
- margin_bottom_mm = 10
- character_width_mm = 7 * pt_to_mm
- width_text = a4_width_mm / character_width_mm
- pdf = FPDF(orientation='P', unit='mm', format='A4')
- pdf.set_auto_page_break(True, margin=margin_bottom_mm)
- pdf.add_page()
- pdf.set_font(family='Helvetica', size=fontsize_pt)
- splitted = text.split('\n')
- for line in splitted:
- lines = textwrap.wrap(line, width_text)
- if len(lines) == 0:
- pdf.ln()
- for wrap in lines:
- pdf.cell(0, fontsize_mm, wrap, ln=1)
- pdf.output(filename+'.pdf', 'F')
- return filename + '.pdf'
- def pdf_from_images(images, filename):
- pdf = FPDF(orientation='P', unit='mm', format='A4')
- pdf.set_auto_page_break(True, margin=10)
- for image in images:
- pdf.add_page()
- img = Image.open(image)
- img = img.rotate(90, expand=True, resample=Image.Resampling.BICUBIC)
- pdf.image(img, x=0, y=0, h=297)
- pdf.output(filename+'.pdf', 'F')
- return filename + '.pdf'
- def print_file(path, printer):
- conn = cups.Connection()
- # printers = conn.getPrinters()
- title = path.split('/')[-1]
- # printer = printer if list(printer.keys()) else list(printers.keys())[0]
- if os.path.isfile(path):
- conn.printFile(printer, path, title, {})
|