#!/bin/python3

import sys
import os


if (len(sys.argv) != 9) :
    print("addcustom printername custompagename  width height left top right bottom")
    print("说明:")
    print("\tprintername           打印机名称")
    print("\tcustompagename        自定义纸张名称")
    print("\twidth height          纸张宽 高 单位mm")
    print("\tleft top right bottom 纸张 左 上 右 下 边距 单位mm\n")
    print("举例: addcustom Lexmark-Lexmark-MS320-Series CustomPage 210 297 6.35 12.7 6.35 12.7")
    exit()

printername  = sys.argv[1]
pagesizename = sys.argv[2]
width        = int(float(sys.argv[3]) * 2.8346)
height       = int(float(sys.argv[4]) * 2.8346)
left         = int(float(sys.argv[5]) * 2.8346)
top          = int(float(sys.argv[6]) * 2.8346)
right        = int(float(sys.argv[7]) * 2.8346)
bottom       = int(float(sys.argv[8]) * 2.8346)


leftx = left
lefty = top

rightx = width - right
righty = height - bottom


filename=("/etc/cups/ppd/%s.ppd" % printername)

print(filename)



f = open(filename,encoding = "utf-8")
lines = f.readlines()
f.close()

for num, line in enumerate(lines):
    if '*CloseUI: *PageSize' in line :
        lines.insert(num, ("*PageSize %s/%s: \"<</PageSize[%d %d]/ImagingBBox null>>setpagedevice\"\n" %(pagesizename, pagesizename, width, height)))
        break

for num, line in enumerate(lines):
    if '*CloseUI: *PageRegion' in line :
        lines.insert(num, ("*PageSize %s/%s: \"<</PageRegion[%d %d]/ImagingBBox null>>setpagedevice\"\n" %(pagesizename, pagesizename, width, height)))
        break

for num, line in enumerate(lines):
    if '*ImageableArea' in line :
        lines.insert(num, ("*ImageableArea %s/%s: \"%d %d %d %d\"\n" %(pagesizename, pagesizename, leftx, lefty, rightx, righty)))
        break

for num, line in enumerate(lines):
    if '*PaperDimension' in line :
        lines.insert(num, ("*PaperDimension %s/%s: \"%d %d\"\n" %(pagesizename, pagesizename, width, height)))
        break
        
    

    
fo = open(filename, "w")
for line in lines:
    fo.write (line)
 
fo.close()


os.popen('service cups restart')
