[Scribus] Script for imposing
el Sismógrafo , S.L.
sismi
Mon Oct 18 13:33:31 CEST 2004
Here comes a script for imposing docs like business cards, postcards, flyers,
etc.
All it does is asking you for the sheet size, the doc size and the bleeds and
then layouts image frames onto the sheet and puts the corresponding crop
marks on.
Im working on a whole collection of scripts for imposing purposes like
imposing tickets and having them numbered automatically, a more sophisticaded
way of handling bleeds and crop marks, automatic generation of calibration
bars, etc. It is going to take me a while as I am having too much work in our
firm.
This collection is _NOT_ an imposition solution for scribus documents but
rather semi automizes imposition tasks that are traditionally done with
programs like FreeHand, Quark, etc.
===
from Tkinter import *
from scribus import *
class Application(Frame):
def __init__(self, master = None):
Frame.__init__(self, master)
self.pack(fill=BOTH, expand=1)
self.grid_rowconfigure(0, weight=1)
self.grid_columnconfigure(0, weight=1)
self.sheetHeight = StringVar()
self.sheetHeight.set("700")
self.sheetWidth = StringVar()
self.sheetWidth.set("1000")
self.pageHeight = StringVar()
self.pageHeight.set("55")
self.pageWidth = StringVar()
self.pageWidth.set("85")
self.bottomMargin= StringVar()
self.bottomMargin.set("20")
self.topMargin = StringVar()
self.topMargin.set("15")
self.lateralMargin= StringVar()
self.lateralMargin.set("5")
self.bleed = StringVar()
self.bleed.set("2")
self.units = StringVar()
self.units.set("mm")
self.cols=StringVar()
self.rows=StringVar()
self.gaps=StringVar()
self.colsOffset=None
self.rowsOffset=None
self.cropMarkSize=4
self.cropMarkWidth=0.3
self.sheetFrame = Frame(self, relief=GROOVE, borderwidth=2)
self.sheetFrame.grid(row=0, column=1, columnspan=1, sticky=NW)
label = Label(self.sheetFrame, text="Sheet Width:")
label.grid(row=0, column=1,sticky=E)
self.sheetHeightEntry = Entry(self.sheetFrame, width=5,
textvariable=self.sheetWidth)
self.sheetHeightEntry.grid(row=0, column=2)
self.sheetHeightEntry.bind("<FocusOut>",self.OnPageEntries)
label = Label(self.sheetFrame, text="Sheet Height:")
label.grid(row=1, column=1,sticky=E)
self.sheetWidthEntry = Entry(self.sheetFrame, width=5,
textvariable=self.sheetHeight)
self.sheetWidthEntry.grid(row=1, column=2)
self.sheetWidthEntry.bind("<FocusOut>",self.OnPageEntries)
label = Label(self.sheetFrame, text="Top Margin:")
label.grid(row=2, column=1,sticky=E)
self.topMarginEntry = Entry(self.sheetFrame, width=5,
textvariable=self.topMargin)
self.topMarginEntry.grid(row=2, column=2)
label = Label(self.sheetFrame, text="Bottom Margin:")
label.grid(row=3, column=1,sticky=E)
self.bottomMarginEntry = Entry(self.sheetFrame, width=5,
textvariable=self.bottomMargin)
self.bottomMarginEntry.grid(row=3, column=2)
label = Label(self.sheetFrame, text="Lateral Margin:")
label.grid(row=4, column=1,sticky=E)
self.lateralMarginEntry = Entry(self.sheetFrame, width=5,
textvariable=self.lateralMargin)
self.lateralMarginEntry.grid(row=4, column=2)
self.PageFrame = Frame(self, relief=GROOVE, borderwidth=2)
self.PageFrame.grid(row=0, column=2, columnspan=1, sticky=NW)
label = Label(self.PageFrame, text="Page Width:")
label.grid(row=0, column=1,sticky=E)
self.PageWidthEntry = Entry(self.PageFrame, width=5,
textvariable=self.pageWidth)
self.PageWidthEntry.grid(row=0, column=2)
self.PageWidthEntry.bind("<FocusOut>",self.OnPageEntries)
label = Label(self.PageFrame, text="Page Height:")
label.grid(row=1, column=1,sticky=E)
self.pageHeightEntry = Entry(self.PageFrame, width=5,
textvariable=self.pageHeight)
self.pageHeightEntry.grid(row=1, column=2)
self.pageHeightEntry.bind("<FocusOut>",self.OnPageEntries)
label = Label(self.PageFrame, text="Bleed:")
label.grid(row=2, column=1,sticky=E)
self.bleedEntry = Entry(self.PageFrame, width=5, textvariable=self.bleed)
self.bleedEntry.grid(row=2, column=2)
self.buttonFrame = Frame(self, relief=GROOVE, borderwidth=2)
self.buttonFrame.grid(row=1, column=1, columnspan=2, sticky=NW)
self.okButton = Button(self.buttonFrame, text="OK", command=self.OnOk)
self.okButton.grid(row=0, column=1, padx=5)
self.cancelButton = Button(self.buttonFrame, text="Cancel",
command=self.OnCancel)
self.cancelButton.grid(row=0, column=2, padx=5)
self.OptimizeButton = Button(self.buttonFrame, text="Best Fit",
command=self.optimizeOrientation)
self.OptimizeButton.grid(row=0, column=3, padx=5)
self.UnitButton = OptionMenu(self.buttonFrame, self.units, "pts","mm", "in",
"p")
self.UnitButton.grid(row=0, column=4, padx=5)
self.StatusFrame = Frame(self, relief=GROOVE, borderwidth=2)
self.StatusFrame.grid(row=2, column=1, columnspan=3, sticky=N)
label=Label(self.StatusFrame, text="Rows:")
label.grid(row=0,column=1)
label=Label(self.StatusFrame, textvariable=self.rows)
label.grid(row=0,column=2)
label=Label(self.StatusFrame, text="Columns:")
label.grid(row=0,column=3)
label=Label(self.StatusFrame, textvariable=self.cols)
label.grid(row=0,column=4)
label=Label(self.StatusFrame, text="Total:")
label.grid(row=0,column=5)
label=Label(self.StatusFrame, textvariable=self.gaps)
label.grid(row=0,column=6)
# self.testvar=StringVar()
# label=Label(self.StatusFrame, textvariable=self.testvar)
# label.grid(row=0,column=7)
#set Rows and Cols
self.__computeRowNum__()
self.__computeColNum__()
self.__computeGapNum__()
###
def OnPageEntries(self,event):
event.char
self.__computeRowNum__()
self.__computeColNum__()
self.__computeGapNum__()
def __computeGapNum__(self):
self.gaps.set(int(self.cols.get())*int(self.rows.get()))
def __computeRowNum__(self):
height =
int(self.sheetHeight.get())-(int(self.topMargin.get())+int(self.bottomMargin.get()))
rows,rowsOffset = divmod(height,int(self.pageHeight.get()))
self.rows.set(rows)
self.rowsOffset=rowsOffset / 2.0
def __computeColNum__(self):
width = int(self.sheetWidth.get())-(int(self.lateralMargin.get())*2)
cols, colsOffset = divmod(width,int(self.pageWidth.get()))
self.cols.set(cols)
self.colsOffset = colsOffset / 2.0
def optimizeOrientation(self):
width = int(self.sheetWidth.get())-(int(self.lateralMargin.get())*2)
height =
int(self.sheetHeight.get())-(int(self.topMargin.get())+int(self.bottomMargin.get()))
#now set hypothetical values for pageWidth and pageHeight
pageWidth = int(self.pageHeight.get())
pageHeight = int(self.pageWidth.get())
#compute hypothetical rows and cols...
rows,rowsOffset = divmod(height,pageHeight)
cols, colsOffset = divmod(width,pageWidth)
if rows*cols > (int(self.rows.get())*int(self.cols.get())):
self.pageHeight.set(pageHeight)
self.pageWidth.set(pageWidth)
self.__computeRowNum__()
self.__computeColNum__()
self.__computeGapNum__()
def createFrames(self):
x = self.colsOffset+int(self.lateralMargin.get())
y = self.rowsOffset+int(self.topMargin.get())
for j in range(0,int(self.rows.get())):
for i in range(0,int(self.cols.get())):
CreateImage(x+i*int(self.pageWidth.get()),y+j*int(self.pageHeight.get()),int(self.pageWidth.get()),int(self.pageHeight.get()))
def createVerticalCropmarks(self,x):
Offset = int(self.topMargin.get())+self.rowsOffset
for i in range(0,int(self.rows.get())):
y=Offset+int(self.pageHeight.get())*i+int(self.bleed.get())
newLine = CreateLine(x-self.cropMarkSize,y,x,y)
SetLineWidth(self.cropMarkWidth,newLine)
y=Offset+int(self.pageHeight.get())*i+int(self.pageHeight.get())-int(self.bleed.get())
newLine = CreateLine(x-self.cropMarkSize,y,x,y)
SetLineWidth(self.cropMarkWidth,newLine)
def createHorizontalCropmarks(self,y):
Offset = int(self.lateralMargin.get())+self.colsOffset
for i in range(0,int(self.cols.get())):
x=Offset+(int(self.pageWidth.get())*i+int(self.bleed.get()))
newLine = CreateLine(x,y-self.cropMarkSize,x,y)
SetLineWidth(self.cropMarkWidth,newLine)
x=Offset+(int(self.pageWidth.get())*i+int(self.pageWidth.get())-int(self.bleed.get()))
newLine = CreateLine(x,y-self.cropMarkSize,x,y)
SetLineWidth(self.cropMarkWidth,newLine)
def OnOk(self):
size =
(int(self.sheetWidth.get()),int(self.sheetHeight.get()))
margins =
(int(self.lateralMargin.get()),int(self.lateralMargin.get()),int(self.topMargin.get()),int(self.bottomMargin.get()))
orientation = 0
firstPageNumber= 1
# unit = 1
FacingPages = 0
FirstSideLeft = 0
if self.units.get()=="pts": unit=0
elif self.units.get()=="mm": unit=1
elif self.units.get()=="in": unit=2
elif self.units.get()=="p": unit=3
NewDoc(size,margins,orientation,firstPageNumber,unit,FacingPages,FirstSideLeft)
#This should go in a different place
self.__computeRowNum__()
self.__computeColNum__()
###
self.createFrames()
self.createVerticalCropmarks(self.colsOffset+int(self.lateralMargin.get()))
self.createVerticalCropmarks(int(self.sheetWidth.get())-(int(self.lateralMargin.get())+self.colsOffset-self.cropMarkSize))
self.createHorizontalCropmarks(self.rowsOffset+int(self.topMargin.get()))
self.createHorizontalCropmarks(int(self.sheetHeight.get())-(int(self.bottomMargin.get())+self.rowsOffset-self.cropMarkSize))
self.master.destroy()
def OnCancel(self):
self.master.destroy()
root = Tk()
app = Application(root)
app.master.resizable(0, 0)
app.master.title("Impose by size")
app.mainloop()
More information about the scribus
mailing list