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 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 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 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)
scribus.messageBox( 'Scribus - Script Error', "You have more than one object selected.\nPlease select one text frame and try again.", scribus.ICON_WARNING, scribus.BUTTON_OK) sys.exit(2) textbox = scribus.getSelectedObject() pageitems = scribus.getPageItems() scribus.setRedraw(False) for item in pageitems: if (item[0] == textbox): if (item[1] != 4): scribus.messageBox('Scribus - Script Error', "This is not a textframe. Try again.", scribus.ICON_WARNING, scribus.BUTTON_OK) sys.exit(2) lines = scribus.getTextLines(textbox) distances = scribus.getTextDistances(textbox) linespace = scribus.getLineSpacing(textbox) dimensions = scribus.getSize(textbox) # (width, height) if (scribus.textOverflows(textbox, 1) > 0): scribus.messageBox('User Error', "This frame is already overflowing", scribus.ICON_WARNING, scribus.BUTTON_OK) sys.exit(2) newtopdist = (dimensions[1] - linespace * lines) / 2 scribus.setTextDistances(distances[0], distances[1], newtopdist, distances[3], textbox) scribus.setRedraw(True)
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 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, )
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)
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)
if (scribus.textOverflows(frame) == 1) : scribus.messageBox('Error:', 'You can\' center a text which is overflowing'); sys.exit(1) # get some page and frame measure (x, y) = scribus.getPosition(frame) (w, h) = scribus.getSize(frame) original_height = h (dl, dr, dt, db) = scribus.getTextDistances(); scribus.setTextDistances(dl, dr, 0, 0); # if the frame doesn't overflow, shorten it to make it overflow while ((scribus.textOverflows(frame) == 0) and (h > 0)) : h -= 10 scribus.sizeObject(w, h, frame) # resize the frame in 10pt steps while (scribus.textOverflows(frame) > 0) : h += 10 scribus.sizeObject(w, h, frame) # undo the latest 10pt step and fine adjust in 1pt steps h -= 10 scribus.sizeObject(w, h, frame)