def newWikiTextBlock(cont, x, y, w): h = 0 #title title = scribus.createText(x, y, w, 1) scribus.setText(cont["wp"].title, title) scribus.setTextAlignment(scribus.ALIGN_LEFT, title) scribus.setFont("Open Sans Bold", title) scribus.setFontSize(14, title) scribus.setLineSpacing(14, title) tw, th = scribus.getSize(title) while scribus.textOverflows(title): scribus.sizeObject(tw, th + 1, title) tw, th = scribus.getSize(title) h = th #content content = scribus.createText(x, y + h + 1, w, 1) scribus.setText(cont["summary"], content) scribus.setTextAlignment(scribus.ALIGN_LEFT, content) scribus.setFont("Open Sans Regular", content) scribus.setFontSize(10, content) tw, th = scribus.getSize(content) while scribus.textOverflows(content): scribus.sizeObject(tw, th + 1, content) tw, th = scribus.getSize(content) if h + th > bH: break h = h + th return h
def createCell(text, roffset, coffset, w, h, marginl, margint, isBlack): #Create textbox box=scribus.createRect(marginl+(roffset-1)*w,margint+(coffset-1)*h, w, h) textBox=scribus.createText(marginl+(roffset-1)*w,margint+(coffset-1)*h, w, h) #insert the text into textbox scribus.setFont("Arial Bold", textBox) #Default font size fontSize=12 if len(text) < 50: fontSize=14 if len(text) < 20: fontSize=16 scribus.setFontSize(fontSize, textBox) scribus.setTextDistances(3, 3, 3, 3, textBox) scribus.insertText(text, 0, textBox) #black card if isBlack==True: scribus.setFillColor("Black", box) scribus.setTextColor("White", textBox) scribus.setLineColor("White", box) #add Logo hOffset=37 wOffset=5 addLogo(marginl+(roffset-1)*w+wOffset,margint+(coffset-1)*h+hOffset, isBlack) return
def addWatermark(self): '''Create a Draft watermark layer. This was taken from: http://wiki.scribus.net/canvas/Adding_%27DRAFT%27_to_a_document''' L = len(self.watermark) # The length of the word # will determine the font size scribus.defineColor("gray", 11, 11, 11, 11) # Set your own color here u = scribus.getUnit() # Get the units of the document al = scribus.getActiveLayer() # Identify the working layer scribus.setUnit( scribus.UNIT_MILLIMETERS) # Set the document units to mm, (w, h) = scribus.getPageSize() # needed to set the text box size scribus.createLayer("c") scribus.setActiveLayer("c") T = scribus.createText(w / 6, 6 * h / 10, h, w / 2) # Create the text box scribus.setText(self.watermark, T) # Insert the text scribus.setTextColor("gray", T) # Set the color of the text scribus.setFontSize( (w / 210) * (180 - 10 * L), T) # Set the font size according to length and width scribus.rotateObject(45, T) # Turn it round antclockwise 45 degrees scribus.setUnit(u) # return to original document units # FIXME: It would be nice if we could move the watermark box down to the lowest layer so # that it is under all the page text. Have not found a method to do this. For now we just # plop the watermark on top of everything else. scribus.setActiveLayer(al) # return to the original active layer
def drawHeaderFooter(pagetitle): """draw some info on the pages""" # get page size pageSize=scribus.getPageSize() pageWidth=pageSize[0] pageHeight=pageSize[1] #pageMargins pageMargins=scribus.getPageMargins() topMargin=pageMargins[0] leftMargin=pageMargins[1] rightMargin=pageMargins[2] bottomMargin=pageMargins[3] #create textbox and insert text for header textbox=scribus.createText(leftMargin, topMargin, pageWidth-leftMargin-rightMargin, HEADERSIZE) #set proper font size and alignment scribus.setFontSize(18, textbox) scribus.setTextAlignment(scribus.ALIGN_CENTERED, textbox) #load the string into the textbox headerstring=pagetitle scribus.insertText(headerstring, 0, textbox) scribus.setTextColor("Black", textbox) #create textbox and insert text for footer textbox=scribus.createText(leftMargin, pageHeight-bottomMargin-FOOTERSIZE, pageWidth-leftMargin-rightMargin, FOOTERSIZE) #set proper font size and alignment scribus.setFontSize(9, textbox) scribus.setTextAlignment(scribus.ALIGN_LEFT, textbox) #load the string into the textbox footerstring="Created using ColorChart.py V %s script for Scribus by Sebastian Stetter - http://www.sebastianstetter.de" % str(__version__) scribus.insertText(footerstring, 0, textbox) scribus.setTextColor("Black", textbox)
def addWatermark (self) : '''Create a Draft watermark layer. This was taken from: http://wiki.scribus.net/canvas/Adding_%27DRAFT%27_to_a_document''' L = len(self.watermark) # The length of the word # will determine the font size scribus.defineColor("gray", 11, 11, 11, 11) # Set your own color here u = scribus.getUnit() # Get the units of the document al = scribus.getActiveLayer() # Identify the working layer scribus.setUnit(scribus.UNIT_MILLIMETERS) # Set the document units to mm, (w,h) = scribus.getPageSize() # needed to set the text box size scribus.createLayer("c") scribus.setActiveLayer("c") T = scribus.createText(w/6, 6*h/10 , h, w/2) # Create the text box scribus.setText(self.watermark, T) # Insert the text scribus.setTextColor("gray", T) # Set the color of the text scribus.setFontSize((w/210)*(180 - 10*L), T) # Set the font size according to length and width scribus.rotateObject(45, T) # Turn it round antclockwise 45 degrees scribus.setUnit(u) # return to original document units # FIXME: It would be nice if we could move the watermark box down to the lowest layer so # that it is under all the page text. Have not found a method to do this. For now we just # plop the watermark on top of everything else. scribus.setActiveLayer(al) # return to the original active layer
def newWikiTextBlock(cont,x,y,w): h = 0 #title title = scribus.createText(x, y, w, 1) scribus.setText(cont["wp"].title, title) scribus.setTextAlignment(scribus.ALIGN_LEFT, title) scribus.setFont("Open Sans Bold", title) scribus.setFontSize(14, title) scribus.setLineSpacing(14, title) tw,th = scribus.getSize(title) while scribus.textOverflows(title): scribus.sizeObject(tw, th+1, title) tw,th = scribus.getSize(title) h = th #content content = scribus.createText(x, y+h+1, w, 1) scribus.setText(cont["summary"], content) scribus.setTextAlignment(scribus.ALIGN_LEFT, content) scribus.setFont("Open Sans Regular", content) scribus.setFontSize(10, content) tw,th = scribus.getSize(content) while scribus.textOverflows(content): scribus.sizeObject(tw, th+1, content) tw,th = scribus.getSize(content) if h+th > bH: break h = h+th return h
def textframes(text_id, x, y, width, height, bg_colour, text_colour, fontsize, font, spacing, parsedtext, layer, linespacing=0, resize=0): scribus.createText(x, y, width, height, text_id) #scribus.text_id = scribus.createText(120, 10, 200, 20) scribus.setText(parsedtext, text_id) scribus.setFont(font, text_id) scribus.setTextColor(text_colour, text_id) scribus.setTextDistances(3*spacing, spacing, 0, spacing, text_id) scribus.sentToLayer(layer, text_id) scribus.setFontSize(fontsize, text_id)
def addLogo(x, y, isBlack): #square side a=5 #line line=0.01 #angle angle=15 #LightGrey scribus.defineColor("LightGrey",0,0,0,128) #DarkGrey scribus.defineColor("DarkGrey",0,0,0,192) # White cards colors squareColor1="Black" lineColor1="White" squareColor2="DarkGrey" lineColor2="White" squareColor3="LightGrey" lineColor3="White" titleColor="Black" # Black cards colors if isBlack==True: squareColor1="DarkGrey" lineColor1="DarkGrey" squareColor2="LightGrey" lineColor2="LightGrey" squareColor3="White" lineColor3="White" titleColor="White" square1=scribus.createRect(x, y+a/10, a, a) scribus.setLineWidth(1, square1) scribus.setFillColor(squareColor1, square1) scribus.setLineColor(lineColor1, square1) scribus.rotateObject(angle, square1) square2=scribus.createRect(x+a/2, y, a, a) scribus.setLineWidth(1, square2) scribus.setFillColor(squareColor2, square2) scribus.setLineColor(lineColor2, square2) square3=scribus.createRect(x+a, y, a, a) scribus.setLineWidth(1, square3) scribus.setFillColor(squareColor3, square3) scribus.setLineColor(lineColor3, square3) scribus.rotateObject(-angle, square3) title=scribus.createText(x+10,y+2, 50, 5) scribus.setFont("Arial Bold", title) scribus.setFontSize(8, title) scribus.insertText("Game of Filth", 0, title) scribus.setTextColor(titleColor, title) return
def addLogo(x, y, isBlack): #square side a=5 #line line=0.01 #angle angle=15 #LightGrey scribus.defineColor("LightGrey",0,0,0,128) #DarkGrey scribus.defineColor("DarkGrey",0,0,0,192) # White cards colors squareColor1="Black" lineColor1="White" squareColor2="DarkGrey" lineColor2="White" squareColor3="LightGrey" lineColor3="White" titleColor="Black" # Black cards colors if isBlack==True: squareColor1="DarkGrey" lineColor1="DarkGrey" squareColor2="LightGrey" lineColor2="LightGrey" squareColor3="White" lineColor3="White" titleColor="White" square1=scribus.createRect(x, y+a/10, a, a) scribus.setLineWidth(1, square1) scribus.setFillColor(squareColor1, square1) scribus.setLineColor(lineColor1, square1) scribus.rotateObject(angle, square1) square2=scribus.createRect(x+a/2, y, a, a) scribus.setLineWidth(1, square2) scribus.setFillColor(squareColor2, square2) scribus.setLineColor(lineColor2, square2) square3=scribus.createRect(x+a, y, a, a) scribus.setLineWidth(1, square3) scribus.setFillColor(squareColor3, square3) scribus.setLineColor(lineColor3, square3) scribus.rotateObject(-angle, square3) title=scribus.createText(x+10,y+2, 50, 5) scribus.setFont("Arial Bold", title) scribus.setFontSize(8, title) scribus.insertText("Cards Against Humanity", 0, title) scribus.setTextColor(titleColor, title) return
def main(argv): """This is a documentation string. Write a description of what your code does here. You should generally put documentation strings ("docstrings") on all your Python functions.""" ######################### # YOUR CODE GOES HERE # ######################### #copyPlayer("__player__","PLAYER 1") #copyPlayer("__player__","PLAYER 2") #copyPlayer("__player__","PLAYER 3") csv = scribus.fileDialog('Open input', 'CSV files (*.csv)') stuff = { 'NAME': 'Mike Hingley', 'ADDRESS': '22 Trinity Street, Cradley Heath, West Midlands', 'PHOTO': '128.jpg' } print(os.path.dirname(os.path.realpath(sys.argv[0]))) print os.getcwd() print(sys.path[0]) print(os.path.abspath('')) sourceName = "__player__" if scribus.objectExists(sourceName): scribus.selectObject(sourceName) scribus.unGroupObject() childObjectCount = scribus.selectionCount() for x in range(0, childObjectCount): element = scribus.getSelectedObject(x) if scribus.getObjectType(str(element)) == 'TextFrame': current = scribus.getAllText(element) if current in stuff: fontsize = scribus.getFontSize(element) font = scribus.getFont(element) scribus.setText(stuff[current], element) scribus.setFont(font) scribus.setFontSize(fontsize) if scribus.getObjectType(str(element)) == 'ImageFrame': current = scribus.getImageFile(element) currentName = os.path.basename(os.path.normpath(current)) print current print currentName if currentName in stuff: ExistingFolder = os.path.split(current) print ExistingFolder[0] newFile = os.path.join(ExistingFolder[0], stuff[currentName]) print newFile scribus.loadImage(newFile, element) print scribus.getObjectType(str(element)) print str(scribus.getSelectedObject(x)) scribus.groupObjects() print "name = " + scribus.getSelectedObject() scribus.setNewName("__player__", scribus.getSelectedObject())
def setPageNumber (self, crds, pageSide, row, pageNumber) : '''Place the page number on the page if called for.''' if self.pageNumbers : # Make the page number box pNumBox = scribus.createText(crds[row]['pageNumXPos' + pageSide], crds[row]['pageNumYPos'], crds[row]['pageNumWidth'], crds[row]['pageNumHeight']) # Put the page number in it and format according to the page we are on scribus.setText(`pageNumber`, pNumBox) if pageSide == 'Odd' : scribus.setTextAlignment(scribus.ALIGN_RIGHT, pNumBox) else: scribus.setTextAlignment(scribus.ALIGN_LEFT, pNumBox) scribus.setFont(self.fonts['pageNum']['bold'], pNumBox) scribus.setFontSize(self.fonts['pageNum']['size'], pNumBox)
def drawColor(colorname, h, v, width, height): # h horizontal position, v vertical position """draws a color chart field with its caption for the given colorname at the h and v position """ # get cmyk values and convert them to 0 - 255 values color = scribus.getColor(colorname) c = int(round(color[0] / 2.55)) m = int(round(color[1] / 2.55)) y = int(round(color[2] / 2.55)) k = int(round(color[3] / 2.55)) # get rgb color rgbcolor = scribus.getColorAsRGB(colorname) r = rgbcolor[0] g = rgbcolor[1] b = rgbcolor[2] # get webcolor webcolor = rgbhex(r, g, b) # but String for Textbox together colorDisplay = colorname if scribus.isSpotColor(colorname): colorDisplay += " (Spot Color)" colorstring = "%s\nC %i, M %i, Y %i, K %i, \nR %i, G %i, B %i \nRGB: %s" % ( colorDisplay, c, m, y, k, r, g, b, webcolor, ) # draw rectangle and set colors rect = scribus.createRect(h, v, width, height) scribus.setFillColor(colorname, rect) # if total amount of color is < 20 draw outline in Black for rectangle, else in same color if c + m + y + k < 20: scribus.setLineColor("Black", rect) else: scribus.setLineColor(colorname, rect) # create textbox and insert text textbox = scribus.createText(h + width + 5, v, 50, height) # set proper font size scribus.setFontSize(11, textbox) scribus.setTextAlignment(scribus.ALIGN_LEFT, textbox) # load the string into the textbox scribus.insertText(colorstring, 0, textbox)
def change_text(text, item): l = scribus.getTextLength(item) scribus.selectText(0, l, item) fs = scribus.getFontSize(item) f = scribus.getFont(item) scribus.insertText(text, 0, item) l2 = scribus.getTextLength(item) scribus.selectText(0, l2, item) scribus.setFontSize(fs, item) scribus.setFont(f, item) scribus.selectText(l2-l, l, item) scribus.deleteText(item) scribus.deselectAll()
def trovasostituisci(text_to_find,text_to_replace): #itero tutti gli oggetti presenti in Scribus for obj in scribus.getAllObjects(): #ottengo il tipo di oggetto di tutti gli elementi della pagina obj_type = scribus.getObjectType(obj) #controllo che il tipo di oggetto scribus sia TextFrame if obj_type == "TextFrame": #ottengo il testo contenuto in tutti gli oggetti obj_text = scribus.getText(obj) #text_to_find = "_F6%" #text_to_replace = "123 TESTO SOSTITUITO 123456789" #cerco la variabile text_to_find if text_to_find in obj_text: #se la trovo la sostituisco text_to_find = obj_text.replace(text_to_find, text_to_replace) scribus.setText(text_to_find, obj) scribus.setFontSize(8, obj)
def setPageNumber(self, crds, pageSide, row, pageNumber): '''Place the page number on the page if called for.''' if self.pageNumbers: # Make the page number box pNumBox = scribus.createText(crds[row]['pageNumXPos' + pageSide], crds[row]['pageNumYPos'], crds[row]['pageNumWidth'], crds[row]['pageNumHeight']) # Put the page number in it and format according to the page we are on scribus.setText( ` pageNumber `, pNumBox) if pageSide == 'Odd': scribus.setTextAlignment(scribus.ALIGN_RIGHT, pNumBox) else: scribus.setTextAlignment(scribus.ALIGN_LEFT, pNumBox) scribus.setFont(self.fonts['pageNum']['bold'], pNumBox) scribus.setFontSize(self.fonts['pageNum']['size'], pNumBox)
def fill_page(contacts): #where contacts is an array or at most max_contact contacts assert(len(contacts) < MAX_PAGE_CONTACTS) nb_lines = (len(contacts) / (CONST_COL_NUMBER)) if((len(contacts) % CONST_COL_NUMBER) != 0): nb_lines = nb_lines+1 for curline in range (0, nb_lines): nb_col = min(len(contacts) - (curline * CONST_COL_NUMBER), CONST_COL_NUMBER) for curcol in range (0, nb_col): x = CONST_TOP_MARGIN + CONST_COL_SIZE * curline y = CONST_LEFT_MARGIN + CONST_LINE_SIZE * curcol txtFrameName= "etiketo"+str(curline)+str(curcol) scribus.createText(y, x, CONST_LINE_SIZE, CONST_COL_SIZE, txtFrameName) contact_idx=curline*CONST_COL_NUMBER+curcol scribus.setText(contacts[contact_idx].print_contact(), txtFrameName) scribus.setTextDistances(6, 0, 3, 0, txtFrameName) scribus.setFontSize(10, txtFrameName) scribus.setFont("Liberation Serif Regular", txtFrameName)
def drawColor(colorname, h, v, width, height): #h horizontal position, v vertical position """draws a color chart field with its caption for the given colorname at the h and v position """ #get cmyk values and convert them to 0 - 255 values color = scribus.getColor(colorname) c = int(round(color[0] / 2.55)) m = int(round(color[1] / 2.55)) y = int(round(color[2] / 2.55)) k = int(round(color[3] / 2.55)) #get rgb color rgbcolor = scribus.getColorAsRGB(colorname) r = rgbcolor[0] g = rgbcolor[1] b = rgbcolor[2] #get webcolor webcolor = rgbhex(r, g, b) #but String for Textbox together colorDisplay = colorname if scribus.isSpotColor(colorname): colorDisplay += " (Spot Color)" colorstring = "%s\nC %i, M %i, Y %i, K %i, \nR %i, G %i, B %i \nRGB: %s" % ( colorDisplay, c, m, y, k, r, g, b, webcolor) #draw rectangle and set colors rect = scribus.createRect(h, v, width, height) scribus.setFillColor(colorname, rect) #if total amount of color is < 20 draw outline in Black for rectangle, else in same color if c + m + y + k < 20: scribus.setLineColor("Black", rect) else: scribus.setLineColor(colorname, rect) #create textbox and insert text textbox = scribus.createText(h + width + 5, v, 50, height) #set proper font size scribus.setFontSize(11, textbox) scribus.setTextAlignment(scribus.ALIGN_LEFT, textbox) #load the string into the textbox scribus.insertText(colorstring, 0, textbox) scribus.setTextColor("Black", textbox)
def fill_page(contacts): #where contacts is an array or at most max_contact contacts assert (len(contacts) < MAX_PAGE_CONTACTS) nb_lines = (len(contacts) / (CONST_COL_NUMBER)) if ((len(contacts) % CONST_COL_NUMBER) != 0): nb_lines = nb_lines + 1 for curline in range(0, nb_lines): nb_col = min( len(contacts) - (curline * CONST_COL_NUMBER), CONST_COL_NUMBER) for curcol in range(0, nb_col): x = CONST_TOP_MARGIN + CONST_COL_SIZE * curline y = CONST_LEFT_MARGIN + CONST_LINE_SIZE * curcol txtFrameName = "etiketo" + str(curline) + str(curcol) scribus.createText(y, x, CONST_LINE_SIZE, CONST_COL_SIZE, txtFrameName) contact_idx = curline * CONST_COL_NUMBER + curcol scribus.setText(contacts[contact_idx].print_contact(), txtFrameName) scribus.setTextDistances(6, 0, 3, 0, txtFrameName) scribus.setFontSize(10, txtFrameName) scribus.setFont("Liberation Serif Regular", txtFrameName)
def slotDoIt(self): nfs = self.val.value() obj = scribus.getSelectedObject(0) t = scribus.getText(obj) scribus.deselectAll() t0 = scribus.getText(obj) fs = scribus.getFontSize(obj) tl = scribus.getTextLength(obj) idx = t0.find(t) + (len(t) / 2) base = fs #print t0 #print t #print "FS %i NFS %i IDX %i START %i" % (fs,nfs,idx,idx - int((nfs - fs) / 0.1)) for i in xrange(max(idx - int((nfs - fs) * 10), 0), idx): scribus.selectText(i, 1, obj) base += 0.1 scribus.setFontSize(base,obj) for i in xrange(idx, min(idx + int((nfs - fs) * 10), tl - 1)): scribus.selectText(i, 1, obj) base -= 0.1 scribus.setFontSize(base,obj) scribus.setRedraw(True) scribus.selectObject(obj)
for infile in filenames: print("Opening " + infile) scribus.openDoc(infile) # Auto-scale the picture try: # Find which image object we must change images = [s for s in scribus.getPageItems() if s[1] == IMG_TYPE] frame = sorted(images, key=lambda s: s[2])[-1][0] # frame should be "Image9" if all elements are rendered scribus.setScaleImageToFrame(True, name=frame) scribus.saveDoc() except NoValidObjectError, err: print("Image not found in " + infile) # Change the text size if necessary print(infile) if infile in files_with_long_text: print("Found " + infile + "!!!") try: frame = "Text7" scribus.setFontSize(11, frame) scribus.saveDoc() except NoValidObjectError, err: print("Text not found in " + infile) # Generate the PDF pdf = scribus.PDFfile() doc_name = infile.rsplit(".", 1)[0] pdf.file = doc_name + ".pdf" print("Saving at " + pdf.file) pdf.save() print("Converted %d files" % len(filenames))
for row in data: #if i > 0 : #sys.exit(1) #scribus.messageBox("csv2table", row) roseid = row[0] rosenameger = row[1] rosenamelat = row[2] #scribus.messageBox("csv2table", roseid+' '+rosenameger+' ('+rosenamelat+')') #Insert the Right Text into the Right Position #Write ID into ID Field scribus.deleteText(idtextstring) scribus.setText(roseid, idtextstring) scribus.setFont(idfont, idtextstring) scribus.setFontSize(idfonSize, idtextstring) scribus.setTextColor(idtextcolor, idtextstring) scribus.setTextShade(idtextshade, idtextstring) #Write German Name into german Name Field scribus.deleteText(gertextstring) scribus.setText(rosenameger, gertextstring) scribus.setFont(gerfont, gertextstring) scribus.setFontSize(gerfonSize, gertextstring) scribus.setTextColor(gertextcolor, gertextstring) scribus.setTextShade(gertextshade, gertextstring) #Write Latin Name into Latin Name field scribus.deleteText(lattextstring) scribus.setText(rosenamelat, lattextstring) scribus.setFont(latfont, lattextstring)
def generateContent(string, window): #generates all the elements/only one element start = 0 end = 0 if string == "all": #dont include the first line to make the data sort work [1:] #sort the the elements by date data = sorted(getCSVdata()[1:], key=lambda row: dateFun(str.strip(row[5])), reverse=True) end = len(data) print(str(end) + " " + str(start)) print("generating elements from all lines") window.destroy() elif RepresentsInt(string): start = int(string) - 1 #index shifting end = int(string) print("only generating line " + string) data = getCSVdata() window.destroy() else: print(string + " is not a valid value") print("exiting") window.destroy() sys.exit() if not scribus.haveDoc() > 0: #do we have a doc? scribus.messageBox("importcvs2table", "No opened document.\nPlease open one first.") sys.exit() userdim = scribus.getUnit() #get unit and change it to mm scribus.setUnit(scribus.UNIT_MILLIMETERS) lineWidth = 3.92 #aka 1.383mm, kp warum rowDate = "" for i in range(start, end): rowName = str.strip(data[i][0]) rowCategory = str.strip(data[i][1]) rowDescription = str.strip(data[i][2]) rowPrice = str.strip(data[i][3]) rowPlace = str.strip(data[i][4]) rowDate = str.strip(data[i][5]) rowTime = str.strip(data[i][6]) if rowName == "": #skip empty csv lines continue print("add element: " + rowName) #random values hpos = 120.0 vpos = 200.0 hposition = 120.0 vposition = 200.0 objectlist = [] #list for all boxes x = 0 #sets the progress #create the blue box print("create the blue line") blueBox = scribus.createLine(hposition + 1, vposition, hposition + 1, vposition + 5.863) scribus.setLineColor("Cyan", blueBox) scribus.setLineWidth(lineWidth, blueBox) objectlist.append(blueBox) scribus.progressSet(x) x = 1 #create the data character box #these are the width values for the numbers zero = 4.608 one = 2.839 two = 4.724 three = 4.393 four = 4.625 five = 4.261 six = 4.278 seven = 4.261 eight = 4.625 nine = 4.708 lenArray = [zero, one, two, three, four, five, six, seven, eight, nine] marginleft = 1.3 margintop = 0.519 #substract, cause the box is heigher that the blue line cellwidthright = 10.951 cellHeight = 8.282 hposition = hposition + marginleft + 1 textbox = scribus.createText(hposition, vposition - margintop, cellwidthright, cellHeight) scribus.setFont("Quicksand Regular", textbox) scribus.setFontSize(20.0, textbox) finalDate = "" rowDateLength = 0 #checks if the rowDate is from 01-09, in that case remove the zero if rowDate[0] == '0': finalDate = rowDate[1] rowDateLength = lenArray[int(rowDate[1])] else: finalDate = rowDate[:2] rowDateLength = lenArray[int(rowDate[0])] + lenArray[int( rowDate[1])] scribus.insertText(finalDate, 0, textbox) print("day: " + finalDate) objectlist.append(textbox) scribus.progressSet(x) x = 2 #create the month/day box print("create the box with the day and month") width = 19.447 height = 8.025 marginleft = rowDateLength #gain that from the calculations above, depends on the width of the rowDate characters monthBox = scribus.createText(hposition + marginleft + 0.7, vposition, width, height) scribus.setFont("Quicksand Regular", monthBox) scribus.setFontSize(8.5, monthBox) month = "" m = rowDate[3:5] if m == '01': month = "Januar" elif m == '02': month = "Februar" elif m == '03': month = "März" elif m == '04': month = "April" elif m == '05': month = "Mai" elif m == '06': month = "Juni" elif m == '07': month = "Juli" elif m == '08': month = "August" elif m == '09': month = "September" elif m == '10': month = "Oktober" elif m == '11': month = "November" elif m == '12': month = "Dezember" else: print("cant determine month!") day = datetime.date(int(rowDate[6:]), int(m), int(rowDate[:2])).weekday() dayName = "" if day == 0: dayName = "Montag" elif day == 1: dayName = "Dienstag" elif day == 2: dayName = "Mittwoch" elif day == 3: dayName = "Donnerstag" elif day == 4: dayName = "Freitag" elif day == 5: dayName = "Samstag" elif day == 6: dayName = "Sonntag" else: print("cant determine day!") text = month + "\n" + dayName scribus.setStyle("Kalender_neu_Monat und Tag", monthBox) scribus.insertText(text, 0, monthBox) print("month: " + month + " day: " + dayName) objectlist.append(monthBox) scribus.progressSet(x) x = 3 #create the main text box print("create the main text box") margintop = 5.5 hpos = hpos - 0.383 #i dont know why but scribus always places the element 0.383 right than it should be :/ mainTextBox = scribus.createText( hpos, vposition + margintop, 43.0, 45.0) #minus eins weil der blaue balken seinen kasten overflowed #insert category print("insert the category: " + rowCategory) scribus.insertText(rowCategory, 0, mainTextBox) endCategory = scribus.getTextLength(mainTextBox) scribus.selectText(0, endCategory, mainTextBox) scribus.setFontSize(10.5, mainTextBox) scribus.selectText(0, endCategory, mainTextBox) scribus.setStyle("Kalender_Eventname", mainTextBox) #insert main text print("insert the main text") scribus.insertText("\n" + rowDescription, endCategory, mainTextBox) endMainText = scribus.getTextLength(mainTextBox) - endCategory scribus.selectText(endCategory, endMainText, mainTextBox) scribus.setStyle("Kalender_Eventbeschreibung", mainTextBox) #get start length to color everything black and set font size startAll = scribus.getTextLength(mainTextBox) createPlaceTimePrice(mainTextBox, "\n| Ort: ", "", "Kalender_Eventname") #insert value for place createPlaceTimePrice(mainTextBox, rowPlace, "Heuristica Regular", "") #insert time letters createPlaceTimePrice(mainTextBox, " | Zeit: ", "Quicksand Regular", "") #insert time value createPlaceTimePrice(mainTextBox, rowTime, "Heuristica Regular", "") #insert price letters createPlaceTimePrice(mainTextBox, " | Eintritt: ", "Quicksand Regular", "") #insert price value createPlaceTimePrice(mainTextBox, rowPrice, "Heuristica Regular", "") #setFontSize and black color for the whole detail box endAll = scribus.getTextLength(mainTextBox) - startAll scribus.selectText(startAll, endAll, mainTextBox) scribus.setFontSize(8.5, mainTextBox) scribus.selectText(startAll, endAll, mainTextBox) scribus.setTextColor("Black", mainTextBox) objectlist.append(mainTextBox) scribus.progressSet(x) #do some generell stuff scribus.groupObjects(objectlist) scribus.progressReset() scribus.setUnit(userdim) # reset unit to previous value scribus.docChanged(True) scribus.statusMessage("Done") scribus.setRedraw(True) print("done") return 0
def main(self): # Load up all the file and record information. # Use CSV reader to build list of record dicts records = self.loadCSVData(self.dataFile) totalRecs = len(records) # Reality check first to see if we have anything to process if totalRecs <= 0: scribus.messageBox('Not Found', 'No records found to process!') sys.exit() pageNumber = 1 recCount = 0 row = 0 pageSide = 'Odd' scribus.progressTotal(totalRecs) paIndex = {} lastName = '' firstName = '' photoFirstName = '' verseRef = '' verseText = '' # Get the page layout coordinates for this publication crds = self.getCoordinates(self.dimensions) # Make a new document to put our records on if scribus.newDocument( getattr(scribus, self.dimensions['page']['scribusPageCode']), (self.dimensions['margins']['left'], self.dimensions['margins']['right'], self.dimensions['margins']['top'], self.dimensions['margins']['bottom']), scribus.PORTRAIT, 1, scribus.UNIT_POINTS, scribus.NOFACINGPAGES, scribus.FIRSTPAGERIGHT, 1): self.setPageNumber(crds, pageSide, row, pageNumber) while recCount < totalRecs: # Output a new page on the first row after we have done the first page if row == 0 and recCount != 0: scribus.newPage(-1) if pageSide == 'Odd': pageSide = 'Even' else: pageSide = 'Odd' self.setPageNumber(crds, pageSide, row, pageNumber) ########### Now set the current record in the current row ########## # Set the last name lastName = records[recCount]['NameLast'] # Adjust the NameFirst field to include the spouse if there is one if records[recCount]['Spouse'] != '': firstName = records[recCount][ 'NameFirst'] + ' & ' + records[recCount]['Spouse'] else: firstName = records[recCount]['NameFirst'] # Make the photo file name photoFirstName = firstName.replace('&', '-').replace( '.', '').replace(' ', '') # Set our record count for progress display and send a status message scribus.progressSet(recCount) scribus.statusMessage('Placing record ' + ` recCount ` + ' of ' + ` totalRecs `) # Add a watermark if a string is specified if self.outputWatermark: self.addWatermark() # Put the last name element in this row nameLastBox = scribus.createText(crds[row]['nameLastXPos'], crds[row]['nameLastYPos'], crds[row]['nameLastWidth'], crds[row]['nameLastHeight']) scribus.setText(lastName, nameLastBox) scribus.setTextAlignment(scribus.ALIGN_RIGHT, nameLastBox) scribus.setTextDistances(0, 0, 0, 0, nameLastBox) scribus.setFont(self.fonts['nameLast']['bold'], nameLastBox) scribus.setFontSize(self.fonts['nameLast']['size'], nameLastBox) scribus.setTextShade(80, nameLastBox) scribus.rotateObject(90, nameLastBox) # Place the first name element in this row nameFirstBox = scribus.createText(crds[row]['nameFirstXPos'], crds[row]['nameFirstYPos'], crds[row]['nameFirstWidth'], crds[row]['nameFirstHeight']) scribus.setText(records[recCount]['Caption'], nameFirstBox) scribus.setTextAlignment(scribus.ALIGN_LEFT, nameFirstBox) scribus.setFont(self.fonts['nameFirst']['boldItalic'], nameFirstBox) scribus.setFontSize(self.fonts['nameFirst']['size'], nameFirstBox) # Place the image element in this row # We will need to do some processing on the first pass # The default output format is JPG orgImgFileName = records[recCount]['Photo'] orgImgFile = os.path.join(self.orgImgDir, orgImgFileName) baseImgFileName = lastName + '_' + photoFirstName if self.willBePngImg: ext = 'png' else: ext = 'jpg' if not self.rgbColor: imgFile = os.path.join( getattr(self, ext + 'ImgDir'), baseImgFileName + '-gray' + '.' + ext) else: imgFile = os.path.join(getattr(self, ext + 'ImgDir'), baseImgFileName + '.' + ext) # Process the image now if there is none if not os.path.exists(imgFile): self.img_process.sizePic(orgImgFile, imgFile, self.maxHeight) # self.img_process.outlinePic(imgFile, imgFile) self.img_process.scalePic(imgFile, imgFile, self.imgDensity) self.img_process.addPoloroidBorder(imgFile, imgFile) # Color RGB is the default if not self.rgbColor: self.img_process.makeGray(imgFile, imgFile) # Double check the output and substitute with placeholder pic if not os.path.exists(imgFile): imgFile = self.placeholderPic # Create the imageBox and load the picture imageBox = scribus.createImage(crds[row]['imageXPos'], crds[row]['imageYPos'], crds[row]['imageWidth'], crds[row]['imageHeight']) if os.path.isfile(imgFile): scribus.loadImage(imgFile, imageBox) scribus.setScaleImageToFrame(scaletoframe=1, proportional=1, name=imageBox) # Place the country element in this row (add second one if present) countryBox = scribus.createText(crds[row]['countryXPos'], crds[row]['countryYPos'], crds[row]['countryWidth'], crds[row]['countryHeight']) countryLine = records[recCount]['Country1'] try: if records[recCount]['Country2'] != '': countryLine = countryLine + ' & ' + records[recCount][ 'Country2'] except: pass scribus.setText(countryLine, countryBox) scribus.setTextAlignment(scribus.ALIGN_RIGHT, countryBox) scribus.setFont(self.fonts['text']['boldItalic'], countryBox) scribus.setFontSize(self.fonts['text']['size'], countryBox) # Place the assignment element in this row assignBox = scribus.createText(crds[row]['assignXPos'], crds[row]['assignYPos'], crds[row]['assignWidth'], crds[row]['assignHeight']) scribus.setText(self.fixText(records[recCount]['Assignment']), assignBox) # Assign style to box # scribus.createParagraphStyle(name='assignStyle', alignment=0, leftmargin=10, firstindent=-10) # scribus.setStyle('assignStyle', assignBox) # Hard formated box scribus.setTextAlignment(scribus.ALIGN_LEFT, assignBox) scribus.setFont(self.fonts['text']['italic'], assignBox) scribus.setFontSize(self.fonts['text']['size'], assignBox) scribus.setLineSpacing(self.fonts['text']['size'] + 1, assignBox) scribus.setTextDistances(4, 0, 0, 0, assignBox) # Resize the frame height and determine the difference for # placing the next frame below it assignHeightNew = self.resizeFrame(assignBox) assignHeightDiff = crds[row]['assignHeight'] - assignHeightNew # Place the verse element in this row verseYPosNew = crds[row]['verseYPos'] - assignHeightDiff verseBox = scribus.createText(crds[row]['verseXPos'], verseYPosNew, crds[row]['verseWidth'], crds[row]['verseHeight']) # The verse element may be either a Scripture verse or a prayer request # If it is Scripture, and it has a verse ref, we want to set that # seperatly so we need to do a little preprocess on the text to find # out if it has a ref. This script will only recognize references # at the end of the string that are enclosed in brackets. See the # findVerseRef() function for more details verseRef = self.findVerseRef(records[recCount]['Prayer']) if verseRef: verseText = self.removeVerseRef( self.fixText(records[recCount]['Prayer'])) scribus.setText(verseText, verseBox) else: scribus.setText(self.fixText(records[recCount]['Prayer']), verseBox) # Can't find a way to set alignment to justified using setTextAlignment() # scribus.setTextAlignment(scribus.ALIGN_LEFT, verseBox) # Because of this, we make a style which seems to work scribus.createParagraphStyle(name='vBoxStyle', alignment=3) scribus.setStyle('vBoxStyle', verseBox) scribus.setFont(self.fonts['verse']['regular'], verseBox) scribus.setFontSize(self.fonts['verse']['size'], verseBox) scribus.setLineSpacing(self.fonts['verse']['size'] + 1, verseBox) scribus.setTextDistances(4, 0, 4, 0, verseBox) if self.hyphenate: scribus.hyphenateText(verseBox) # Get the height difference in case we need to set ref box verseHeightNew = self.resizeFrame(verseBox) verseHeightDiff = crds[row]['verseHeight'] - verseHeightNew if verseRef: # Set coordinates for this box vRefBoxX = crds[row]['verseXPos'] vRefBoxY = (verseYPosNew + verseHeightNew) vRefBoxH = crds[row]['nameFirstHeight'] / 2 vRefBoxW = crds[row]['verseWidth'] verseRefBox = scribus.createText(vRefBoxX, vRefBoxY, vRefBoxW, vRefBoxH) scribus.setText(verseRef, verseRefBox) scribus.setTextAlignment(scribus.ALIGN_RIGHT, verseRefBox) scribus.setFont(self.fonts['verse']['italic'], verseRefBox) scribus.setFontSize(self.fonts['verse']['size'] - 2, verseRefBox) scribus.setLineSpacing(self.fonts['verse']['size'], verseRefBox) scribus.setTextDistances(2, 0, 0, 0, verseRefBox) # Up our counts if row >= self.dimensions['rows']['count'] - 1: row = 0 pageNumber += 1 else: row += 1 recCount += 1 # Create the index page here # Output a new page for the index if row == 0 and recCount != 0: scribus.newPage(-1) if pageSide == 'Odd': pageSide = 'Even' else: pageSide = 'Odd' self.setPageNumber(crds, pageSide, 0, pageNumber) # Outut the index entries at this point # for key in paIndex.keys() : # Report we are done now before we loose focus scribus.statusMessage('Process Complete!') ############################################################################### ############################## Output Results ################################# ############################################################################### # Now we will output the results to PDF if that is desired if self.makePdf: pdfExport = scribus.PDFfile() pdfExport.info = self.pdfFile pdfExport.file = self.pdfFile pdfExport.save() # View the output if set if self.makePdf and self.viewPdf: cmd = ['evince', self.pdfFile] try: subprocess.Popen(cmd) except Exception as e: result = scribus.messageBox( 'View PDF command failed with: ' + str(e), scribus.BUTTON_OK)
def main (self) : # Load up all the file and record information. # Use CSV reader to build list of record dicts records = self.loadCSVData(self.dataFile) totalRecs = len(records) # Reality check first to see if we have anything to process if totalRecs <= 0 : scribus.messageBox('Not Found', 'No records found to process!') sys.exit() pageNumber = 1 recCount = 0 row = 0 pageSide = 'Odd' scribus.progressTotal(totalRecs) paIndex = {} lastName = '' firstName = '' photoFirstName = '' verseRef = '' verseText = '' # Get the page layout coordinates for this publication crds = self.getCoordinates(self.dimensions) # Make a new document to put our records on if scribus.newDocument(getattr(scribus, self.dimensions['page']['scribusPageCode']), (self.dimensions['margins']['left'], self.dimensions['margins']['right'], self.dimensions['margins']['top'], self.dimensions['margins']['bottom']), scribus.PORTRAIT, 1, scribus.UNIT_POINTS, scribus.NOFACINGPAGES, scribus.FIRSTPAGERIGHT, 1) : self.setPageNumber(crds, pageSide, row, pageNumber) while recCount < totalRecs : # Output a new page on the first row after we have done the first page if row == 0 and recCount != 0: scribus.newPage(-1) if pageSide == 'Odd' : pageSide = 'Even' else : pageSide = 'Odd' self.setPageNumber(crds, pageSide, row, pageNumber) ########### Now set the current record in the current row ########## # Set the last name lastName = records[recCount]['NameLast'] # Adjust the NameFirst field to include the spouse if there is one if records[recCount]['Spouse'] != '' : firstName = records[recCount]['NameFirst'] + ' & ' + records[recCount]['Spouse'] else : firstName = records[recCount]['NameFirst'] # Make the photo file name photoFirstName = firstName.replace('&', '-').replace('.', '').replace(' ', '') # Set our record count for progress display and send a status message scribus.progressSet(recCount) scribus.statusMessage('Placing record ' + `recCount` + ' of ' + `totalRecs`) # Add a watermark if a string is specified if self.outputWatermark : self.addWatermark() # Put the last name element in this row nameLastBox = scribus.createText(crds[row]['nameLastXPos'], crds[row]['nameLastYPos'], crds[row]['nameLastWidth'], crds[row]['nameLastHeight']) scribus.setText(lastName, nameLastBox) scribus.setTextAlignment(scribus.ALIGN_RIGHT, nameLastBox) scribus.setTextDistances(0, 0, 0, 0, nameLastBox) scribus.setFont(self.fonts['nameLast']['bold'], nameLastBox) scribus.setFontSize(self.fonts['nameLast']['size'], nameLastBox) scribus.setTextShade(80, nameLastBox) scribus.rotateObject(90, nameLastBox) # Place the first name element in this row nameFirstBox = scribus.createText(crds[row]['nameFirstXPos'], crds[row]['nameFirstYPos'], crds[row]['nameFirstWidth'], crds[row]['nameFirstHeight']) scribus.setText(records[recCount]['Caption'], nameFirstBox) scribus.setTextAlignment(scribus.ALIGN_LEFT, nameFirstBox) scribus.setFont(self.fonts['nameFirst']['boldItalic'], nameFirstBox) scribus.setFontSize(self.fonts['nameFirst']['size'], nameFirstBox) # Place the image element in this row # We will need to do some processing on the first pass # The default output format is JPG orgImgFileName = records[recCount]['Photo'] orgImgFile = os.path.join(self.orgImgDir, orgImgFileName) baseImgFileName = lastName + '_' + photoFirstName if self.willBePngImg : ext = 'png' else : ext = 'jpg' if not self.rgbColor : imgFile = os.path.join(getattr(self, ext + 'ImgDir'), baseImgFileName + '-gray' + '.' + ext) else : imgFile = os.path.join(getattr(self, ext + 'ImgDir'), baseImgFileName + '.' + ext) # Process the image now if there is none if not os.path.exists(imgFile) : self.img_process.sizePic(orgImgFile, imgFile, self.maxHeight) # self.img_process.outlinePic(imgFile, imgFile) self.img_process.scalePic(imgFile, imgFile, self.imgDensity) self.img_process.addPoloroidBorder(imgFile, imgFile) # Color RGB is the default if not self.rgbColor : self.img_process.makeGray(imgFile, imgFile) # Double check the output and substitute with placeholder pic if not os.path.exists(imgFile) : imgFile = self.placeholderPic # Create the imageBox and load the picture imageBox = scribus.createImage(crds[row]['imageXPos'], crds[row]['imageYPos'], crds[row]['imageWidth'], crds[row]['imageHeight']) if os.path.isfile(imgFile) : scribus.loadImage(imgFile, imageBox) scribus.setScaleImageToFrame(scaletoframe=1, proportional=1, name=imageBox) # Place the country element in this row (add second one if present) countryBox = scribus.createText(crds[row]['countryXPos'], crds[row]['countryYPos'], crds[row]['countryWidth'], crds[row]['countryHeight']) countryLine = records[recCount]['Country1'] try : if records[recCount]['Country2'] != '' : countryLine = countryLine + ' & ' + records[recCount]['Country2'] except : pass scribus.setText(countryLine, countryBox) scribus.setTextAlignment(scribus.ALIGN_RIGHT, countryBox) scribus.setFont(self.fonts['text']['boldItalic'], countryBox) scribus.setFontSize(self.fonts['text']['size'], countryBox) # Place the assignment element in this row assignBox = scribus.createText(crds[row]['assignXPos'], crds[row]['assignYPos'], crds[row]['assignWidth'], crds[row]['assignHeight']) scribus.setText(self.fixText(records[recCount]['Assignment']), assignBox) # Assign style to box # scribus.createParagraphStyle(name='assignStyle', alignment=0, leftmargin=10, firstindent=-10) # scribus.setStyle('assignStyle', assignBox) # Hard formated box scribus.setTextAlignment(scribus.ALIGN_LEFT, assignBox) scribus.setFont(self.fonts['text']['italic'], assignBox) scribus.setFontSize(self.fonts['text']['size'], assignBox) scribus.setLineSpacing(self.fonts['text']['size'] + 1, assignBox) scribus.setTextDistances(4, 0, 0, 0, assignBox) # Resize the frame height and determine the difference for # placing the next frame below it assignHeightNew = self.resizeFrame(assignBox) assignHeightDiff = crds[row]['assignHeight'] - assignHeightNew # Place the verse element in this row verseYPosNew = crds[row]['verseYPos'] - assignHeightDiff verseBox = scribus.createText(crds[row]['verseXPos'], verseYPosNew, crds[row]['verseWidth'], crds[row]['verseHeight']) # The verse element may be either a Scripture verse or a prayer request # If it is Scripture, and it has a verse ref, we want to set that # seperatly so we need to do a little preprocess on the text to find # out if it has a ref. This script will only recognize references # at the end of the string that are enclosed in brackets. See the # findVerseRef() function for more details verseRef = self.findVerseRef(records[recCount]['Prayer']) if verseRef : verseText = self.removeVerseRef(self.fixText(records[recCount]['Prayer'])) scribus.setText(verseText, verseBox) else : scribus.setText(self.fixText(records[recCount]['Prayer']), verseBox) # Can't find a way to set alignment to justified using setTextAlignment() # scribus.setTextAlignment(scribus.ALIGN_LEFT, verseBox) # Because of this, we make a style which seems to work scribus.createParagraphStyle(name='vBoxStyle', alignment=3) scribus.setStyle('vBoxStyle', verseBox) scribus.setFont(self.fonts['verse']['regular'], verseBox) scribus.setFontSize(self.fonts['verse']['size'], verseBox) scribus.setLineSpacing(self.fonts['verse']['size'] + 1, verseBox) scribus.setTextDistances(4, 0, 4, 0, verseBox) if self.hyphenate : scribus.hyphenateText(verseBox) # Get the height difference in case we need to set ref box verseHeightNew = self.resizeFrame(verseBox) verseHeightDiff = crds[row]['verseHeight'] - verseHeightNew if verseRef : # Set coordinates for this box vRefBoxX = crds[row]['verseXPos'] vRefBoxY = (verseYPosNew + verseHeightNew) vRefBoxH = crds[row]['nameFirstHeight'] / 2 vRefBoxW = crds[row]['verseWidth'] verseRefBox = scribus.createText(vRefBoxX, vRefBoxY, vRefBoxW, vRefBoxH) scribus.setText(verseRef, verseRefBox) scribus.setTextAlignment(scribus.ALIGN_RIGHT, verseRefBox) scribus.setFont(self.fonts['verse']['italic'], verseRefBox) scribus.setFontSize(self.fonts['verse']['size'] - 2, verseRefBox) scribus.setLineSpacing(self.fonts['verse']['size'], verseRefBox) scribus.setTextDistances(2, 0, 0, 0, verseRefBox) # Up our counts if row >= self.dimensions['rows']['count'] - 1 : row = 0 pageNumber +=1 else : row +=1 recCount +=1 # Create the index page here # Output a new page for the index if row == 0 and recCount != 0: scribus.newPage(-1) if pageSide == 'Odd' : pageSide = 'Even' else : pageSide = 'Odd' self.setPageNumber(crds, pageSide, 0, pageNumber) # Outut the index entries at this point # for key in paIndex.keys() : # Report we are done now before we loose focus scribus.statusMessage('Process Complete!') ############################################################################### ############################## Output Results ################################# ############################################################################### # Now we will output the results to PDF if that is desired if self.makePdf : pdfExport = scribus.PDFfile() pdfExport.info = self.pdfFile pdfExport.file = self.pdfFile pdfExport.save() # View the output if set if self.makePdf and self.viewPdf : cmd = ['evince', self.pdfFile] try : subprocess.Popen(cmd) except Exception as e : result = scribus.messageBox ('View PDF command failed with: ' + str(e), scribus.BUTTON_OK)
def main(argv): scribus.setUnit(scribus.UNIT_MILLIMETERS) # get page size pagesize = scribus.getPageSize() ########################################### # size and position of the exit buttons linksize = pagesize[0] / 30 linkpos = pagesize[0] - linksize - 2 # set up exit to page pagenum = scribus.pageCount() exittopage = scribus.valueDialog( "Exit to page", "Exit buttons should go to page (1-" + str(pagenum) + ") :", "1") #error #if exittopage > pagenum: # scribus.messageBox("Error", "This page doesn't exist.") # sys.exit() # get active layer, create new layer for exit buttons, set it as active activelayer = scribus.getActiveLayer() scribus.createLayer("Exitbuttons") scribus.setActiveLayer("Exitbuttons") #progressbar max scribus.progressTotal(pagenum) # iterate through all the pages page = 1 while (page <= pagenum): #messagebar text scribus.messagebarText("Create exit buttons...") scribus.progressSet(page) scribus.gotoPage(page) # create rectangle exitrect = scribus.createRect(linkpos, 2, linksize, linksize, "exitrect" + str(page)) scribus.setFillColor("White", exitrect) # create text in rectangle exittext = scribus.createText(linkpos, 4, linksize, linksize, "exittext" + str(page)) scribus.setText("X", exittext) scribus.setFontSize(20, exittext) scribus.setTextAlignment(1, exittext) # create link annotation exitlink = scribus.createText(linkpos, 2, linksize, linksize, "exitlink" + str(page)) #setLinkAnnotation(page,x,y,["name"]) scribus.setLinkAnnotation(int(exittopage), 0, 0, exitlink) # add page number to iteration page += 1 # go back to active layer scribus.setActiveLayer(activelayer)
# scribus.openDoc(os.path.dirname(os.path.realpath(__file__)) + '/cards.sla') # scribus.openDoc(os.path.dirname(os.path.realpath(sys.argv[0])) + '/cards.sla') scribus.messageBox("Error", "You should first open the cards.sla file", ICON_WARNING, BUTTON_OK) sys.exit(1) # for page in range(2, scribus.pageCount()) : # scribus.messageBox("Error", str(scribus.pageCount()), ICON_WARNING, BUTTON_OK) for page in range(scribus.pageCount(), 1, -1) : scribus.deletePage(page) for project in projects : scribus.newPage(-1, project['section']) # title: x=10 y=10 w=85mm h=20 # description: x=10 y=40 w=85mm h=80 titleFrame = scribus.createText(10, 10, 85, 20) scribus.setText(project['title'], titleFrame) scribus.setStyle('title', titleFrame) descriptionFrame = scribus.createText(10, 40, 85, 80) scribus.setText(project['description'], descriptionFrame) scribus.setStyle('description', descriptionFrame) # shrink the title and text size if it does not fit in the frame while scribus.textOverflows(titleFrame) != 0 : fontSize = scribus.getFontSize(titleFrame) scribus.setFontSize(fontSize - 1, titleFrame) while scribus.textOverflows(descriptionFrame) != 0 : fontSize = scribus.getFontSize(descriptionFrame) scribus.setFontSize(fontSize - 1, descriptionFrame)
def funzioneprincipale(csvData): for line in csvData: i = 0 listacompleta=[] while i < len(line): listacompleta.append(line[i]) #scribus.messageBox('Scribus - Messaggio di test', str(line[i]), scribus.ICON_WARNING, scribus.BUTTON_OK) i = i + 1 if scribus.haveDoc(): #scribus.messageBox('Scribus - Messaggio di test', str(listacompleta), scribus.ICON_WARNING, scribus.BUTTON_OK) #scribus.newDoc(scribus.PAPER_LETTER, (20,20,20,20),scribus.PORTRAIT, 1, scribus.UNIT_POINTS, scribus.NOFACINGPAGES, scribus.FIRSTPAGERIGHT) #variabili pos_footer_x = 43 pos_y = 521 width1 = 330 width2 = 90 height = 26 max_height = 710 max_width = 520 interlinea = 12.5 margin_sx = 3.5 margin_dx = 3.5 margin_up = 3.5 margin_down = 2 font_size = 8 # primo numero da inserire dopo %VAR_F n = 6 num_col = 3 width3 = width1 + width2 #ciclo tutte le righe del csv for i in range(1, len(csvData)): #scribus.messageBox('Scribus - Messaggio di test', str(len(csvData[i])), scribus.ICON_WARNING, scribus.BUTTON_OK) pos_x = 43 #colonne for j in range(3, len(csvData[i])): #creo la variabile pos_footer, che contiene la nuova posizione della y #che verrà assegnata alla cornice di testo chiamata 'footer' while (pos_x <= max_width): #creazione di 3 colonne con dimensioni diverse # la prima ha larghezza pari a variabile width1 # la seconda e la terza hanno la larghezza pari a width2 if (pos_x <= width1): nometxtbox = "Cella: I=%d, Pos_x=%d, Pos_y=%d" % (i, pos_x, pos_y) cell_label = csvData[i][j] scribus.createText(pos_x, pos_y, width1, height, nometxtbox) scribus.createRect(pos_x, pos_y, width1, height) scribus.setText(cell_label, nometxtbox) #scribus.setText("Testo di pcsvDataa","Testo1") #comando per creare una cornice di testo #modifico la dimensione del testo scribus.setFontSize(font_size, nometxtbox) #modifico i margini (sx, dx, alto, basso) scribus.setTextDistances(margin_sx, margin_dx, margin_up, margin_down, nometxtbox) #modifico l’interlinea scribus.setLineSpacing(interlinea,nometxtbox) j = j + 1 pos_x = pos_x + width1 #n = n + 1 elif (pos_x <= width3): nometxtbox = "Cella: I=%d, Pos_x=%d, Pos_y=%d" % (i, pos_x, pos_y) cell_label = csvData[i][j] scribus.createText(pos_x, pos_y, width2, height, nometxtbox) scribus.createRect(pos_x, pos_y, width2, height) scribus.setText(cell_label, nometxtbox) #Allineo il testo al centro scribus.setTextAlignment(scribus.ALIGN_CENTERED, nometxtbox) scribus.setFontSize(font_size, nometxtbox) scribus.setTextDistances(margin_sx, margin_dx, margin_up, margin_down, nometxtbox) scribus.setLineSpacing(interlinea,nometxtbox) j = j + 1 pos_x = pos_x + width2 #n = n + 1 else: nometxtbox = "Cella: I=%d, Pos_x=%d, Pos_y=%d" % (i, pos_x, pos_y) cell_label = csvData[i][j] scribus.createText(pos_x, pos_y, width2, height, nometxtbox) scribus.createRect(pos_x, pos_y, width2, height) scribus.setText(cell_label, nometxtbox) #Allineo il testo al centro scribus.setTextAlignment(scribus.ALIGN_CENTERED, nometxtbox) scribus.setFontSize(font_size, nometxtbox) scribus.setTextDistances(margin_sx, margin_dx, margin_up, margin_down, nometxtbox) scribus.setLineSpacing(interlinea,nometxtbox) j = j + 1 pos_x = pos_x + width2 #n = n + 1 if pos_y >= max_height: #crea una nuova pagina se la variabile pos_y raggiunge la dimensione #massima prestabilita scribus.newPage(-1) pos_y = height + 20 else: pos_y = pos_y + height #Salvo il documento attivo altrimenti #lo script ScribusGenerator non inserisce la tabella appena creata pos_footer_y = pos_y + height + 5 scribus.moveObjectAbs(pos_footer_x, pos_footer_y,"footer") scribus.saveDoc() else: scribus.messageBox('Alert di errore', "Devi avere una pagina Scribus aperta!!!", scribus.ICON_WARNING, scribus.BUTTON_OK) scribus.newDoc(scribus.PAPER_LETTER, (20,20,20,20),scribus.PORTRAIT, 1, scribus.UNIT_POINTS, scribus.NOFACINGPAGES, scribus.FIRSTPAGERIGHT) #per importare uno script copiarlo nella cartella: C:\Python27\Lib\site-packages #Ottenere testo da textbox #a=scribus.getText(nometextbox) #mostrare msgbox #scribus.messageBox('Scribus - Messaggio di test', a, scribus.ICON_WARNING, scribus.BUTTON_OK)
import sys try: import scribus except ImportError: print "This script only works from within Scribus" sys.exit(1) obj = scribus.getSelectedObject(0) sdir = 1 # options fs = 8 fsmax = 14 fsmin = 8 inc = 0.0005 ### tl = scribus.getTextLength() for c in range(tl - 1): scribus.selectText(c, 1, obj) if(sdir == 1): fs += inc if(fs > fsmax): sdir = 0 else: fs -= inc if(fs < fsmin): sdir = 1 scribus.setFontSize(fs,obj)
distros.keys().sort() for distro in sorted(distros.iterkeys()): # extract the dictionary content description = distros[distro][0] filesizeiso = distros[distro][1] md5sum = distros[distro][2] modified = distros[distro][3] # create page title/header B = scribus.createText(left_page_x, 10, 100, 10) scribus.setText(distro, B) scribus.setFont("Gentium Plus Compact Regular", B) scribus.setTextAlignment(scribus.ALIGN_LEFT, B) scribus.setFontSize(18, B) # load small-logo into page imagedir = "./logos/" f = scribus.createImage(left_page_x, 23, 65, 65) scribus.loadImage(imagedir + distro + ".png", f) scribus.setScaleImageToFrame(1,1,f) scribus.sentToLayer("textlayer", f) # get description text for each distro scribus.createText(left_page_x, 92, 120, 80,distro) scribus.setText(description, distro) scribus.setLineSpacing(12,distro) linespacing = scribus.getLineSpacing(distro) scribus.setFont("Gentium Plus Compact Regular", distro) scribus.setTextAlignment(scribus.ALIGN_LEFT, distro)
pageY = 11 scribus.defineColor("gray",21,21,21,21) scribus.newDocument((pageX, pageY), (0.0, 0.0, 0.0, 0.0), scribus.LANDSCAPE, 1, scribus.UNIT_INCHES, scribus.PAGE_1, 0, 1) #0,13 for final for x in range(0,13): #1,12,6 for final for y in range(1,12,6): rx = x ry = y for zx in range(0,2): for zy in range(0,3): a = scribus.createText(2.25+((zx+0)*(pageX/1.55)), 0.75+(zy*(pageY/3.84)), 1.25, 0.25) scribus.setFont('Arial Regular',a) scribus.setFontSize(12, a) scribus.setTextColor("gray", a) scribus.setTextAlignment(scribus.ALIGN_CENTERED, a) scribus.rotateObject(180, a); rxy = rx-ry scribus.insertText('%(rx)d - %(ry)d = %(rxy)d' % locals(), 0, a) q = scribus.createText(1.0+((zx+0)*(pageX/1.55)), 1.125+(zy*(pageY/3.84)), 4, 1) scribus.setFont('Arial Regular',q) scribus.setFontSize(55, q) scribus.setTextAlignment(scribus.ALIGN_CENTERED, q) scribus.insertText('%(rx)d + %(ry)d =' % locals(), 0, q) ry = ry + 1 l = scribus.createLine(0.0,2.833333,11,2.833333) scribus.setLineColor("gray", l)
layercount].elements[elementcount].position.x - ( size_x / 2) y_pos = albumdata.pages[pagenum].layers[ layercount].elements[elementcount].position.y - ( size_y / 2) #This is the kind of text defined within the "text" label #<p style=\"text-align: left;\"><span style=\"color:#000000;font-family: Calibri; font-size: 2.82mm;\">Cataratas de Iguazú (Argentina) 27/11/2016</span></p>\n caption_text = "" parser.feed(albumdata.pages[pagenum].layers[layercount]. elements[elementcount].text) #print "caption_text : " + caption_text captionBox = scribus.createText(x_pos, y_pos, size_x, size_y) scribus.setText(caption_text, captionBox) #scribus.setFont("Copper Std", captionBox) scribus.setFontSize(fontsize, captionBox) #The following are defined within the element attributes, but they don't seem to be used. The fonts are rather taken from the html info within the "text" attribute #scribus.setFont(albumdata.pages[pagenum].layers[layercount].elements[elementcount].font.family, captionBox) #scribus.setFontSize(albumdata.pages[pagenum].layers[layercount].elements[elementcount].font.size, captionBox) rotation = -albumdata.pages[pagenum].layers[ layercount].elements[elementcount].rotation % (2 * math.pi) if rotation > 0.5: # https://stackoverflow.com/questions/34372480/rotate-point-about-another-point-in-degrees-python # Scribus by default rotates the text box over the upper leftmost corner, while myphotobook uses the center point. # Therefore, I use the function in the above site to translate the frame after rotation # It works for most of our rotated text (upside down, as in the album spine) but sometimes not in the straight horizontal text # ox, oy = origin ox, oy = 0, 0 # px, py = point px, py = size_x / 2, size_y / 2
def funzioneprincipale(csvData): # def funzioneprincipale(row,headerRow): # scribus.messageBox('Scribus - Messaggio di test', str(row), scribus.ICON_WARNING, scribus.BUTTON_OK) # scribus.messageBox('Scribus - Messaggio di test', str(headerRow), scribus.ICON_WARNING, scribus.BUTTON_OK) # scribus.messageBox('Scribus - Messaggio di test', str(csvData), scribus.ICON_WARNING, scribus.BUTTON_OK) if scribus.haveDoc(): # scribus.newDoc(scribus.PAPER_LETTER, (20,20,20,20),scribus.PORTRAIT, 1, scribus.UNIT_POINTS, scribus.NOFACINGPAGES, scribus.FIRSTPAGERIGHT) # Dichiaro variabili e costanti # le COSTANTI sono quelle in maiuscolo POS_X_FOOTER = 43 WIDTH1 = 330 WIDTH2 = 90 HEIGHT = 26 MAX_HEIGHT = 710 # max_width = 520 INTERLINEA = 12.5 MARGIN_SX = 3.5 MARGIN_DX = 3.5 MARGIN_UP = 3.5 MARGIN_DOWN = 2 FONT_SIZE = 8 NUM_COL = 3 # primo numero da inserire dopo %VAR_F # n = 6 # Riga di partenza del csv, da cui inizio a creare la tabella ROW_START = 1 # Colonna di partenza, da cui creare la tabella COL_START = 3 # variabili in minuscolo pos_y = 521 # ciclo tutte le righe del csv for i in range(ROW_START, len(csvData)): # creo la variabile pos_footer, che contiene la nuova posizione della y # che verrà assegnata alla cornice di testo chiamata 'footer' pos_x = 43 for j in range(COL_START, len(csvData[i])): # i è la riga attuale del csv # j è la colonna attuale del csv # cur_col è la colonna attuale nella pagina cur_col = j % NUM_COL cur_width = WIDTH1 if cur_col == 0: # and pos_x <= pos_x: # a capo ogni num_col celle # pos_y = pos_y + height pos_x = 43 if pos_y >= MAX_HEIGHT: # crea una nuova pagina se la variabile pos_y raggiunge la dimensione # massima prestabilita scribus.newPage(-1) pos_y = HEIGHT + 20 else: pos_y = pos_y + HEIGHT if cur_col == 1 or cur_col == 2: cur_width = WIDTH2 nometxtbox = "Cella: csvrow=%d, row=%d, col=%d" % (i, pos_y, pos_x) # cell_label = "%VAR_F" + str(n) + "%" cell_label = csvData[i][j] scribus.createText(pos_x, pos_y, cur_width, HEIGHT, nometxtbox) scribus.createRect(pos_x, pos_y, cur_width, HEIGHT) scribus.setText(cell_label, nometxtbox) # modifico la dimensione del testo scribus.setFontSize(FONT_SIZE, nometxtbox) # modifico i margini (sx, dx, alto, basso) scribus.setTextDistances(MARGIN_SX, MARGIN_DX, MARGIN_UP, MARGIN_DOWN, nometxtbox) # modifico l’interlinea scribus.setLineSpacing(INTERLINEA, nometxtbox) pos_x = pos_x + cur_width # n=n+1 pos_footer = pos_y + HEIGHT + 5 scribus.moveObjectAbs(POS_X_FOOTER, pos_footer, "footer") # Salvo il documento attivo altrimenti # lo script ScribusGenerator non inserisce la tabella appena creata # scribus.messageBox('Scribus - Messaggio di test', str(cell_label), scribus.ICON_WARNING, scribus.BUTTON_OK) scribus.saveDoc() else: scribus.messageBox( "Alert di errore", "Devi avere una pagina Scribus aperta!!!", scribus.ICON_WARNING, scribus.BUTTON_OK ) scribus.newDoc( scribus.PAPER_LETTER, (20, 20, 20, 20), scribus.PORTRAIT, 1, scribus.UNIT_POINTS, scribus.NOFACINGPAGES, scribus.FIRSTPAGERIGHT, )
offsetY = 0.15 minResultA = 0 maxResultA = 14 minResultB = 1 maxResultB = 3 rx = [[0 for col in range(100)] for row in range(100)] ry = [[0 for col in range(100)] for row in range(100)] scribus.newDocument((pageX, pageY), (0.0, 0.0, 0.0, 0.0), scribus.PORTRAIT, 1, scribus.UNIT_INCHES, scribus.PAGE_1, 0, 1) scribus.defineColor("gray",21,21,21,21) for x in range(0,maxX): for y in range(0,maxY): q = scribus.createText((x*((pageX*0.9)/maxX))+offsetX, (y*(pageY/maxY))+offsetY, (pageX*0.9)/maxX, pageY/maxY) scribus.setFont('Arial Regular',q) scribus.setFontSize(48, q) if random.randint(0, 1) == 0: rx[x][y] = random.randint(minResultB, maxResultB) ry[x][y] = random.randint(minResultA, maxResultA) else: rx[x][y] = random.randint(minResultA, maxResultA) ry[x][y] = random.randint(minResultB, maxResultB) rxx = rx[x][y] ryy = ry[x][y] scribus.insertText('%(rxx)d + %(ryy)d =__' % locals(), 0, q) scribus.newPage(-1) xx = 0 for x in range(maxX-1,-1,-1): for y in range(0,maxY): q = scribus.createText((xx*((pageX/6)/maxX))+offsetXX, (y*(pageY/maxY))+offsetY, (pageX/6)/maxX, pageY/maxY) scribus.setFont('Arial Regular',q)