def myFirstPage(canvas, doc): canvas.saveState() canvas.setFont('Helvetica-Bold', 20) canvas.drawCentredString(PAGE_WIDTH / 2.0, PAGE_HEIGHT - 108, Title) canvas.drawCentredString(PAGE_WIDTH / 2.0, PAGE_HEIGHT - 130, Date) im = Image("lucicoin.png", width=2 * inch, height=2 * inch) im.hAlign = 'LEFT' canvas.setFont('Helvetica', 9) canvas.drawString(inch, 0.75 * inch, "First Page / %s" % pageinfo) canvas.restoreState()
def add_image(self, src, width, height, align=CENTER, caption=None): if src.split(".")[-1] in ["png", "PNG"]: try: f = open(src, 'rb') data = StringIO(f.read()) except: return else: img = Image(data, width, height) f.close() else: img = Image(src, width, height) img.hAlign = align if caption: caption_p = Paragraph(caption, self.theme.paragraph_centered) image_table = Table([[img], [caption_p]], width) image_table.setStyle( TableStyle([('ALIGN', (-1, -1), (-1, -1), 'CENTER')])) self.add(image_table) else: self.add(img)
def add_image(self, src, width, height, align=CENTER, caption=None): if src.split(".")[-1] in ["png", "PNG"]: try: f = open(src, 'rb') data = StringIO(f.read()) except: return else: img = Image(data, width, height) f.close() else: img = Image(src, width, height) img.hAlign = align if caption: caption_p = Paragraph(caption, self.theme.paragraph_centered) image_table = Table([[img], [caption_p]], width) image_table.setStyle(TableStyle([('ALIGN',(-1,-1),(-1,-1), 'CENTER')])) self.add(image_table) else: self.add(img)
def add_image(self, src, width, height, align=CENTER): img = Image(src, width, height) img.hAlign = align self.add(img)
def __init__(self, dictValeurs={}, dictOptions={}, IDmodele=None, mode="facture", ouverture=True, nomFichier=None, titre=None): """ Impression """ global DICT_VALEURS, DICT_OPTIONS DICT_VALEURS = dictValeurs DICT_OPTIONS = dictOptions self.mode = mode detail = 0 if dictOptions["affichage_prestations"] != None : detail = dictOptions["affichage_prestations"] # Initialisation du document if nomFichier == None : nomDoc = _(u"Temp/%ss_%s.pdf") % (mode, FonctionsPerso.GenerationIDdoc()) else : nomDoc = nomFichier doc = BaseDocTemplate(nomDoc, pagesize=TAILLE_PAGE, showBoundary=False) # Mémorise le ID du modèle modeleDoc = DLG_Noedoc.ModeleDoc(IDmodele=IDmodele) doc.modeleDoc = modeleDoc # Vérifie qu'un cadre principal existe bien dans le document if doc.modeleDoc.FindObjet("cadre_principal") == None : raise Exception("Votre modèle de document doit obligatoirement comporter un cadre principal. Retournez dans l'éditeur de document et utilisez pour votre modèle la commande 'Insérer un objet spécial > Insérer le cadre principal'.") # Importe le template de la première page doc.addPageTemplates(MyPageTemplate(pageSize=TAILLE_PAGE, doc=doc)) story = [] styleSheet = getSampleStyleSheet() h3 = styleSheet['Heading3'] styleTexte = styleSheet['BodyText'] styleTexte.fontName = "Helvetica" styleTexte.fontSize = 9 styleTexte.borderPadding = 9 styleTexte.leading = 12 ## # Définit le template des pages suivantes ## story.append(NextPageTemplate("suivante")) # ----------- Insertion du contenu des frames -------------- listeNomsSansCivilite = [] for IDcompte_payeur, dictValeur in dictValeurs.iteritems() : listeNomsSansCivilite.append((dictValeur["nomSansCivilite"], IDcompte_payeur)) listeNomsSansCivilite.sort() for nomSansCivilite, IDcompte_payeur in listeNomsSansCivilite : dictValeur = dictValeurs[IDcompte_payeur] if dictValeur["select"] == True : story.append(DocAssign("IDcompte_payeur", IDcompte_payeur)) nomSansCivilite = dictValeur["nomSansCivilite"] story.append(Bookmark(nomSansCivilite, str(IDcompte_payeur))) # ------------------- TITRE ----------------- if dictOptions["afficher_titre"] == True : if titre == None : if mode == "facture" : titre = _(u"Facture") if mode == "attestation" : titre = _(u"Attestation de présence") if dictValeur.has_key("texte_titre") : titre = dictValeur["texte_titre"] dataTableau = [] largeursColonnes = [ CADRE_CONTENU[2], ] dataTableau.append((titre,)) texteDateDebut = DateEngFr(str(dictValeur["date_debut"])) texteDateFin = DateEngFr(str(dictValeur["date_fin"])) if dictOptions["afficher_periode"] == True : dataTableau.append((_(u"Période du %s au %s") % (texteDateDebut, texteDateFin),)) styles = [ ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ('FONT',(0,0),(0,0), "Helvetica-Bold", dictOptions["taille_texte_titre"]), ('LINEBELOW', (0,0), (0,0), 0.25, colors.black), ('ALIGN', (0,0), (-1,-1), 'LEFT'), ] if dictOptions["afficher_periode"] == True : styles.append(('FONT',(0,1),(0,1), "Helvetica", dictOptions["taille_texte_periode"])) tableau = Table(dataTableau, largeursColonnes) tableau.setStyle(TableStyle(styles)) story.append(tableau) story.append(Spacer(0,20)) # TEXTE D'INTRODUCTION pour Attestation ## if mode == "attestation" and dictValeur["intro"] != None : ## texteIntro = dictValeur["intro"] ## paraStyle = ParagraphStyle(name="intro", ## fontName="Helvetica", ## fontSize=9, ## leading=14, ## spaceBefore=0, ## spaceafter=0, ## leftIndent=20, ## rightIndent=20, ## alignment=1, ## ) ## story.append(Paragraph(u"<i>%s</i>" % texteIntro, paraStyle)) ## story.append(Spacer(0,20)) if dictOptions["texte_introduction"] != "" : paraStyle = ParagraphStyle(name="introduction", fontName="Helvetica", fontSize=dictOptions["taille_texte_introduction"], leading=14, spaceBefore=0, spaceafter=0, leftIndent=5, rightIndent=5, alignment=dictOptions["alignement_texte_introduction"], backColor=ConvertCouleurWXpourPDF(dictOptions["couleur_fond_introduction"]), borderColor=ConvertCouleurWXpourPDF(dictOptions["couleur_bord_introduction"]), borderWidth=0.5, borderPadding=5, ) texte = dictValeur["texte_introduction"].replace("\\n", "<br/>") if dictOptions["style_texte_introduction"] == 0 : texte = u"<para>%s</para>" % texte if dictOptions["style_texte_introduction"] == 1 : texte = u"<para><i>%s</i></para>" % texte if dictOptions["style_texte_introduction"] == 2 : texte = u"<para><b>%s</b></para>" % texte if dictOptions["style_texte_introduction"] == 3 : texte = u"<para><i><b>%s</b></i></para>" % texte story.append(Paragraph(texte, paraStyle)) story.append(Spacer(0,20)) couleurFond = ConvertCouleurWXpourPDF(dictOptions["couleur_fond_1"]) # (0.8, 0.8, 1) couleurFondActivite = ConvertCouleurWXpourPDF(dictOptions["couleur_fond_2"]) # (0.92, 0.92, 1) # ------------------- TABLEAU CONTENU ----------------- montantPeriode = FloatToDecimal(0.0) montantVentilation = FloatToDecimal(0.0) # Recherche si TVA utilisée activeTVA = False for IDindividu, dictIndividus in dictValeur["individus"].iteritems() : for IDactivite, dictActivites in dictIndividus["activites"].iteritems() : for date, dictDates in dictActivites["presences"].iteritems() : for dictPrestation in dictDates["unites"] : if dictPrestation["tva"] != None and dictPrestation["tva"] != 0.0 : activeTVA = True # Remplissage for IDindividu, dictIndividus in dictValeur["individus"].iteritems() : if dictIndividus["select"] == True : listeIndexActivites = [] montantPeriode += dictIndividus["total"] montantVentilation += dictIndividus["ventilation"] # Initialisation des largeurs de tableau largeurColonneDate = dictOptions["largeur_colonne_date"] largeurColonneMontantHT = dictOptions["largeur_colonne_montant_ht"] largeurColonneTVA = dictOptions["largeur_colonne_montant_tva"] largeurColonneMontantTTC = dictOptions["largeur_colonne_montant_ttc"] largeurColonneBaseTTC = largeurColonneMontantTTC if activeTVA == True and detail == 0 : largeurColonneIntitule = CADRE_CONTENU[2] - largeurColonneDate - largeurColonneMontantHT - largeurColonneTVA - largeurColonneMontantTTC largeursColonnes = [ largeurColonneDate, largeurColonneIntitule, largeurColonneMontantHT, largeurColonneTVA, largeurColonneMontantTTC] else : if detail != 0 : largeurColonneIntitule = CADRE_CONTENU[2] - largeurColonneDate - largeurColonneBaseTTC - largeurColonneMontantTTC largeursColonnes = [ largeurColonneDate, largeurColonneIntitule, largeurColonneBaseTTC, largeurColonneMontantTTC] else : largeurColonneIntitule = CADRE_CONTENU[2] - largeurColonneDate - largeurColonneMontantTTC largeursColonnes = [ largeurColonneDate, largeurColonneIntitule, largeurColonneMontantTTC] # Insertion du nom de l'individu paraStyle = ParagraphStyle(name="individu", fontName="Helvetica", fontSize=dictOptions["taille_texte_individu"], leading=dictOptions["taille_texte_individu"], spaceBefore=0, spaceafter=0, ) texteIndividu = Paragraph(dictIndividus["texte"], paraStyle) dataTableau = [] dataTableau.append([texteIndividu,]) tableau = Table(dataTableau, [CADRE_CONTENU[2],]) listeStyles = [ ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'), ('FONT', (0, 0), (-1, -1), "Helvetica", dictOptions["taille_texte_individu"]), ('GRID', (0, 0), (-1, -1), 0.25, colors.black), ('BACKGROUND', (0, 0), (-1, 0), couleurFond), ] tableau.setStyle(TableStyle(listeStyles)) story.append(tableau) # Insertion du nom de l'activité for IDactivite, dictActivites in dictIndividus["activites"].iteritems() : texteActivite = dictActivites["texte"] if texteActivite != None : dataTableau = [] dataTableau.append([texteActivite,]) tableau = Table(dataTableau, [CADRE_CONTENU[2],]) listeStyles = [ ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'), ('FONT', (0, 0), (-1, -1), "Helvetica", dictOptions["taille_texte_activite"]), ('GRID', (0, 0), (-1, -1), 0.25, colors.black), ('ALIGN', (0, 0), (-1, -1), 'LEFT'), ('BACKGROUND', (0, 0), (-1, 0), couleurFondActivite), ] tableau.setStyle(TableStyle(listeStyles)) story.append(tableau) # Style de paragraphe normal paraStyle = ParagraphStyle(name="prestation", fontName="Helvetica", fontSize=dictOptions["taille_texte_prestation"], leading=dictOptions["taille_texte_prestation"], spaceBefore=0, spaceAfter=0, ) paraLabelsColonnes = ParagraphStyle(name="paraLabelsColonnes", fontName="Helvetica", fontSize=dictOptions["taille_texte_noms_colonnes"], leading=dictOptions["taille_texte_noms_colonnes"], spaceBefore=0, spaceAfter=0, ) if detail != 0 : # -------------- MODE REGROUPE ---------------- # Regroupement par prestations identiques dictRegroupement = {} for date, dictDates in dictActivites["presences"].iteritems() : total = dictDates["total"] for dictPrestation in dictDates["unites"] : label = dictPrestation["label"] listeDatesUnite = GetDatesListes(dictPrestation["listeDatesConso"]) montant = dictPrestation["montant"] deductions = dictPrestation["deductions"] tva = dictPrestation["tva"] if detail == 1 : labelkey = label if detail == 2 : labelkey = label + " P.U. " + "%.2f %s" % (montant, SYMBOLE) if dictRegroupement.has_key(labelkey) == False : dictRegroupement[labelkey] = {"labelpresta" : label, "total" : 0, "nbre" : 0, "base" : 0, "dates_forfait" : None} dictRegroupement[labelkey]["base"] = montant dictRegroupement[labelkey]["total"] += montant dictRegroupement[labelkey]["nbre"] += 1 if detail == 1 : dictRegroupement[labelkey]["base"] = dictRegroupement[labelkey]["total"] / dictRegroupement[labelkey]["nbre"] if len(listeDatesUnite) > 1 : listeDatesUnite.sort() date_debut = listeDatesUnite[0] date_fin = listeDatesUnite[-1] nbreDates = len(listeDatesUnite) dictRegroupement[labelkey]["dates_forfait"] = _(u"<BR/><font size=5>Du %s au %s soit %d jours</font>") % (DateEngFr(str(date_debut)), DateEngFr(str(date_fin)), nbreDates) # Insertion des prestations regroupées listeLabels = dictRegroupement.keys() listeLabels.sort() dataTableau = [( Paragraph(_(u"<para align='center'>Quantité</para>"), paraLabelsColonnes), Paragraph(_(u"<para align='center'>Prestation</para>"), paraLabelsColonnes), Paragraph(_(u"<para align='center'>Base</para>"), paraLabelsColonnes), Paragraph(_(u"<para align='center'>Montant</para>"), paraLabelsColonnes), ),] for labelkey in listeLabels : label = dictRegroupement[labelkey]["labelpresta"] nbre = dictRegroupement[labelkey]["nbre"] total = dictRegroupement[labelkey]["total"] base = dictRegroupement[labelkey]["base"] # recherche d'un commentaire if dictOptions.has_key("dictCommentaires") : key = (label, IDactivite) if dictOptions["dictCommentaires"].has_key(key) : commentaire = dictOptions["dictCommentaires"][key] label = "%s <i><font color='#939393'>%s</font></i>" % (label, commentaire) # Formatage du label intitule = Paragraph(label, paraStyle) # Rajout des dates de forfait #dates_forfait = dictRegroupement[label]["dates_forfait"] #if dates_forfait != None : # intitule = [intitule, Paragraph(dates_forfait, paraStyle)] dataTableau.append([Paragraph(u"<para align='center'>%d</para>" % nbre, paraStyle), intitule, Paragraph(u"<para align='center'>%.02f %s</para>" % (base, SYMBOLE), paraStyle), Paragraph(u"<para align='center'>%.02f %s</para>" % (total, SYMBOLE), paraStyle)]) else : # -------------------------------------------------------------- MODE DETAILLE ------------------------------------------------------------------ # Insertion de la date listeDates = [] for date, dictDates in dictActivites["presences"].iteritems() : listeDates.append(date) listeDates.sort() paraStyle = ParagraphStyle(name="prestation", fontName="Helvetica", fontSize=dictOptions["taille_texte_prestation"], leading=dictOptions["taille_texte_prestation"], spaceBefore=0, spaceAfter=0, ) dataTableau = [] if activeTVA == True : dataTableau.append([ Paragraph(_(u"<para align='center'>Date</para>"), paraLabelsColonnes), Paragraph(_(u"<para align='center'>Prestation</para>"), paraLabelsColonnes), Paragraph(_(u"<para align='center'>Montant HT</para>"), paraLabelsColonnes), Paragraph(_(u"<para align='center'>Taux TVA</para>"), paraLabelsColonnes), Paragraph(_(u"<para align='center'>Montant TTC</para>"), paraLabelsColonnes), ]) for date in listeDates : dictDates = dictActivites["presences"][date] date = dictDates["texte"] prestations = dictDates["unites"] # Insertion des unités de présence listeIntitules = [] listeMontantsHT = [] listeTVA = [] listeMontantsTTC = [] texteIntitules = u"" texteMontantsHT = u"" texteTVA = u"" texteMontantsTTC = u"" for dictPrestation in prestations : label = dictPrestation["label"] listeDatesUnite = GetDatesListes(dictPrestation["listeDatesConso"]) montant_initial = dictPrestation["montant_initial"] montant = dictPrestation["montant"] deductions = dictPrestation["deductions"] tva = dictPrestation["tva"] # Date texteDate = Paragraph("<para align='center'>%s</para>" % date, paraStyle) # recherche d'un commentaire if dictOptions.has_key("dictCommentaires") : key = (label, IDactivite) if dictOptions["dictCommentaires"].has_key(key) : commentaire = dictOptions["dictCommentaires"][key] label = "%s <i><font color='#939393'>%s</font></i>" % (label, commentaire) # Affiche le Label de la prestation listeIntitules.append(Paragraph(label, paraStyle)) # Recherche si c'est un forfait if len(listeDatesUnite) > 1 : listeDatesUnite.sort() date_debut = listeDatesUnite[0] date_fin = listeDatesUnite[-1] nbreDates = len(listeDatesUnite) label = _(u"<BR/><font size=5>Du %s au %s soit %d jours</font>") % (DateEngFr(str(date_debut)), DateEngFr(str(date_fin)), nbreDates) listeIntitules.append(Paragraph(label, paraStyle)) # TVA if activeTVA == True : if tva == None : tva = 0.0 montantHT = (100.0 * float(montant)) / (100 + float(tva)) #montant - montant * 1.0 * float(tva) / 100 listeMontantsHT.append(Paragraph(u"<para align='center'>%.02f %s</para>" % (montantHT, SYMBOLE), paraStyle)) listeTVA.append(Paragraph(u"<para align='center'>%.02f %%</para>" % tva, paraStyle)) else : listeMontantsHT.append("") listeTVA.append("") # Affiche total listeMontantsTTC.append(Paragraph(u"<para align='center'>%.02f %s</para>" % (montant, SYMBOLE), paraStyle)) # Déductions if len(deductions) > 0 : for dictDeduction in deductions : listeIntitules.append(Paragraph(u"<para align='left'><font size=5 color='#939393'>- %.02f %s : %s</font></para>" % (dictDeduction["montant"], SYMBOLE, dictDeduction["label"]), paraStyle)) #listeIntitules.append(Paragraph(u"<para align='left'><font size=5 color='#939393'>%s</font></para>" % dictDeduction["label"], paraStyle)) listeMontantsHT.append(Paragraph(" ", paraStyle)) listeTVA.append(Paragraph(" ", paraStyle)) listeMontantsTTC.append(Paragraph(" ", paraStyle)) #listeMontantsTTC.append(Paragraph(u"<para align='center'><font size=5 color='#939393'>- %.02f %s</font></para>" % (dictDeduction["montant"], SYMBOLE), paraStyle)) if len(listeIntitules) == 1 : texteIntitules = listeIntitules[0] texteMontantsHT = listeMontantsHT[0] texteTVA = listeTVA[0] texteMontantsTTC = listeMontantsTTC[0] if len(listeIntitules) > 1 : texteIntitules = listeIntitules texteMontantsHT = listeMontantsHT texteTVA = listeTVA texteMontantsTTC = listeMontantsTTC if activeTVA == True : dataTableau.append([texteDate, texteIntitules, texteMontantsHT, texteTVA, texteMontantsTTC]) else : dataTableau.append([texteDate, texteIntitules, texteMontantsTTC]) # Style du tableau des prestations tableau = Table(dataTableau, largeursColonnes) listeStyles = [ ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'), ('FONT', (0, 0), (-1, -1), "Helvetica", dictOptions["taille_texte_prestation"]), ('GRID', (0, 0), (-1,-1), 0.25, colors.black), ('ALIGN', (0, 0), (-1, -1), 'CENTRE'), ('ALIGN', (1, 0), (1, -1), 'LEFT'), ('TOPPADDING', (0, 0), (-1, -1), 1), ('BOTTOMPADDING', (0, 0), (-1, -1), 3), ] tableau.setStyle(TableStyle(listeStyles)) story.append(tableau) # Insertion des totaux dataTableau = [] if activeTVA == True and detail == 0 : dataTableau.append(["", "", "", "", Paragraph("<para align='center'>%.02f %s</para>" % (dictIndividus["total"], SYMBOLE) , paraStyle)]) else : if detail != 0 : dataTableau.append(["", "", "", Paragraph("<para align='center'>%.02f %s</para>" % (dictIndividus["total"], SYMBOLE) , paraStyle)]) else : dataTableau.append(["", "", Paragraph("<para align='center'>%.02f %s</para>" % (dictIndividus["total"], SYMBOLE) , paraStyle)]) listeStyles = [ ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'), ('FONT', (0, 0), (-1, -1), "Helvetica", dictOptions["taille_texte_prestation"]), ('GRID', (-1, -1), (-1,-1), 0.25, colors.black), ('ALIGN', (-1, -1), (-1, -1), 'CENTRE'), ('BACKGROUND', (-1, -1), (-1, -1), couleurFond), ('TOPPADDING', (0, 0), (-1, -1), 1), ('BOTTOMPADDING', (0, 0), (-1, -1), 3), ] # Création du tableau tableau = Table(dataTableau, largeursColonnes) tableau.setStyle(TableStyle(listeStyles)) story.append(tableau) story.append(Spacer(0, 10)) # Intégration des messages, des reports et des qf listeMessages = [] paraStyle = ParagraphStyle(name="message", fontName="Helvetica", fontSize=dictOptions["taille_texte_messages"], leading=dictOptions["taille_texte_messages"], #spaceBefore=0, spaceAfter=2, ) # Date d'échéance ## if dictOptions["echeance"] != None : ## listeMessages.append(Paragraph(dictOptions["echeance"], paraStyle)) # QF aux dates de facture if mode == "facture" and dictOptions["afficher_qf_dates"] == True : dictQfdates = dictValeur["qfdates"] listeDates = dictQfdates.keys() listeDates.sort() if len(listeDates) > 0 : for dates in listeDates : texteQf = _(u"--- Votre QF %s : <b>%s</b> ---") % (dates, dictQfdates[dates]) listeMessages.append(Paragraph(texteQf, paraStyle)) # Reports if mode == "facture" and dictOptions["afficher_impayes"] == True : dictReports = dictValeur["reports"] listePeriodes = dictReports.keys() listePeriodes.sort() if len(listePeriodes) > 0 : texteReport = _(u"<b>Impayés : </b>Merci de bien vouloir nous retourner également le règlement des prestations antérieures : ") for periode in listePeriodes : annee, mois = periode nomPeriode = PeriodeComplete(mois, annee) montant_impaye = dictReports[periode] texteReport += u"%s (%.02f %s), " % (nomPeriode, montant_impaye, SYMBOLE) texteReport = texteReport[:-2] + u"." listeMessages.append(Paragraph(texteReport, paraStyle)) # Messages if mode == "facture" : if dictOptions["afficher_messages"] == True : for message in dictOptions["messages"] : listeMessages.append(Paragraph(message, paraStyle)) for message_familial in dictValeur["messages_familiaux"] : texte = message_familial["texte"] if len(texte) > 0 and texte[-1] not in ".!?" : texte = texte + u"." texte = _(u"<b>Message : </b>%s") % texte listeMessages.append(Paragraph(texte, paraStyle)) if len(listeMessages) > 0 : listeMessages.insert(0, Paragraph(_(u"<u>Informations :</u>"), paraStyle)) # ------------------ CADRE TOTAUX ------------------------ dataTableau = [] largeurColonneLabel = 110 largeursColonnes = [ CADRE_CONTENU[2] - largeurColonneMontantTTC - largeurColonneLabel, largeurColonneLabel, largeurColonneMontantTTC] dataTableau.append((listeMessages, _(u"TOTAL période:"), u"%.02f %s" % (dictValeur["total"], SYMBOLE))) dataTableau.append(("", _(u"Montant déjà réglé :"), u"%.02f %s" % (dictValeur["ventilation"], SYMBOLE))) dataTableau.append(("", _(u"Reste à régler :"), u"%.02f %s" % (dictValeur["solde"], SYMBOLE) )) style = [ ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'), ('FONT', (1, 0), (1, -1), "Helvetica-Bold", dictOptions["taille_texte_labels_totaux"]), ('FONT', (2, 0), (2, -1), "Helvetica-Bold", dictOptions["taille_texte_montants_totaux"]), ('GRID', (2, 0), (2, 0), 0.25, colors.black), ('GRID', (2, 1), (2, 1), 0.25, colors.black), ('GRID', (2, 2), (2, 2), 0.25, colors.black), ('ALIGN', (1, 0), (1, -1), 'RIGHT'), ('ALIGN', (2, 0), (2, -1), 'CENTRE'), ('BACKGROUND', (2, 2), (2, 2), couleurFond), ('SPAN', (0, 0), (0, -1)), ] if mode == "facture" and len(listeMessages) > 0 : #style.append( ('BACKGROUND', (0, 0), (0, 0), couleurFondActivite) ) style.append( ('FONT', (0, 0), (0, -1), "Helvetica", 8) ) style.append( ('VALIGN', (0, 0), (0, -1), 'TOP') ) tableau = Table(dataTableau, largeursColonnes, rowHeights=[18, 18, None]) tableau.setStyle(TableStyle(style)) story.append(tableau) # ------------------------- PRELEVEMENTS -------------------- if dictOptions.has_key("afficher_avis_prelevements") and dictValeur.has_key("prelevement") : if dictValeur["prelevement"] != None and dictOptions["afficher_avis_prelevements"] == True : paraStyle = ParagraphStyle(name="intro", fontName="Helvetica", fontSize=8, leading=11, spaceBefore=2, spaceafter=2, alignment=1, backColor=couleurFondActivite, ) story.append(Spacer(0,20)) story.append(Paragraph(u"<para align='center'><i>%s</i></para>" % dictValeur["prelevement"], paraStyle)) # Texte conclusion if dictOptions["texte_conclusion"] != "" : story.append(Spacer(0,20)) paraStyle = ParagraphStyle(name="conclusion", fontName="Helvetica", fontSize=dictOptions["taille_texte_conclusion"], leading=14, spaceBefore=0, spaceafter=0, leftIndent=5, rightIndent=5, alignment=dictOptions["alignement_texte_conclusion"], backColor=ConvertCouleurWXpourPDF(dictOptions["couleur_fond_conclusion"]), borderColor=ConvertCouleurWXpourPDF(dictOptions["couleur_bord_conclusion"]), borderWidth=0.5, borderPadding=5, ) texte = dictValeur["texte_conclusion"].replace("\\n", "<br/>") if dictOptions["style_texte_conclusion"] == 0 : texte = u"<para>%s</para>" % texte if dictOptions["style_texte_conclusion"] == 1 : texte = u"<para><i>%s</i></para>" % texte if dictOptions["style_texte_conclusion"] == 2 : texte = u"<para><b>%s</b></para>" % texte if dictOptions["style_texte_conclusion"] == 3 : texte = u"<para><i><b>%s</b></i></para>" % texte story.append(Paragraph(texte, paraStyle)) # Image signature if dictOptions["image_signature"] != "" : cheminImage = dictOptions["image_signature"] if os.path.isfile(cheminImage) : img = Image(cheminImage) largeur, hauteur = int(img.drawWidth * 1.0 * dictOptions["taille_image_signature"] / 100.0), int(img.drawHeight * 1.0 * dictOptions["taille_image_signature"] / 100.0) if largeur > CADRE_CONTENU[2] or hauteur > CADRE_CONTENU[3] : raise Exception(_(u"L'image de signature est trop grande. Veuillez diminuer sa taille avec le parametre Taille.")) img.drawWidth, img.drawHeight = largeur, hauteur if dictOptions["alignement_image_signature"] == 0 : img.hAlign = "LEFT" if dictOptions["alignement_image_signature"] == 1 : img.hAlign = "CENTER" if dictOptions["alignement_image_signature"] == 2 : img.hAlign = "RIGHT" story.append(Spacer(0,20)) story.append(img) # Saut de page story.append(PageBreak()) # Finalisation du PDF ## try : doc.build(story) ## except Exception, err : ## print "Erreur dans ouverture PDF :", err ## if "Permission denied" in err : ## dlg = wx.MessageDialog(None, _(u"Noethys ne peut pas créer le PDF.\n\nVeuillez vérifier qu'un autre PDF n'est pas déjà ouvert en arrière-plan..."), _(u"Erreur d'édition"), wx.OK | wx.ICON_ERROR) ## dlg.ShowModal() ## dlg.Destroy() ## return # Ouverture du PDF if ouverture == True : FonctionsPerso.LanceFichierExterne(nomDoc)
_styleD1 = ParagraphStyle('Courier',fontName="Courier", fontSize=9, leading = 15) _stylePR = ParagraphStyle('Courier',fontName="Courier", fontSize=8) _table_heading = ParagraphStyle('Courier',fontName="Courier", fontSize=7, leading = 10) styles.add(ParagraphStyle(name='Wrap', fontSize=8, wordWrap='LTR', firstLineIndent = 0,alignment = TA_LEFT)) row = [] ctr = 0 tmpfilename=os.path.join(request.folder,'private',str(uuid4())) # doc = SimpleDocTemplate(tmpfilename,pagesize=A4, rightMargin=20,leftMargin=20, topMargin=200,bottomMargin=200, showBoundary=1) # doc = SimpleDocTemplate(tmpfilename,pagesize=A4, rightMargin=20,leftMargin=20, topMargin=2.1 * inch, bottomMargin=1.5 * inch)#, showBoundary=1) doc = SimpleDocTemplate(tmpfilename,pagesize=A4, rightMargin=20,leftMargin=20, topMargin=2.7 * inch,bottomMargin=2.4 * inch)#, showBoundary=1) _merchandpartners = request.folder + '/static/images/merchpartners.jpg' _img = Image(_merchandpartners) _img.drawHeight = 2.55 *inch * _img.drawHeight / _img.drawWidth _img.drawWidth = 3.25 * inch _img.hAlign = 'CENTER' _MerchAndPartners = Image(_merchandpartners, width = 550, height = 80, hAlign = 'CENTER') _merchtrading = request.folder + '/static/images/merchtrading.jpg' _img = Image(_merchtrading) _img.drawHeight = 2.55 *inch * _img.drawHeight / _img.drawWidth _img.drawWidth = 3.25 * inch _img.hAlign = 'CENTER' _MerchTrading = Image(_merchtrading, width = 550, height = 80, hAlign = 'CENTER') def get_account_voucher_canvas(canvas, doc): canvas.saveState() _id = db(db.Payment_Voucher_Header.payment_voucher_no == request.args(0)).select().first() _ma = dc(dc.Master_Account.account_code == _id.account_code).select().first()
def createUrgentCoverPage(page_size=PAGE_SIZE_LETTER, total_pages=1, recipient_name='', recipient_phone='', recipient_fax='', sender_name='', sender_phone='', sender_fax='', sender_email='', regarding='', message='', preserve_formatting=False, output=None): s = getSampleStyleSheet() story = [] i = Image(os.path.join(prop.image_dir, 'other', 'urgent_title.png'), width=424, height=92) i.hAlign = 'LEFT' story.append(i) story.append(Spacer(1, inch)) story.append(HRFlowable(width='100%', color='black')) ps = ParagraphStyle( name='normal', fontName='Times-Roman', #fontName='STSong-Light', #fontName='UMing', fontSize=12) recipient_name_label = Paragraph("To:", ps) recipient_name_text = Paragraph(escape(recipient_name[:64]), ps) recipient_fax_label = Paragraph("Fax:", ps) recipient_fax_text = Paragraph(escape(recipient_fax[:64]), ps) recipient_phone_label = Paragraph("Phone:", ps) recipient_phone_text = Paragraph(escape(recipient_phone[:64]), ps) sender_name_label = Paragraph("From:", ps) sender_name_text = Paragraph(escape(sender_name[:64]), ps) sender_phone_label = Paragraph("Phone:", ps) sender_phone_text = Paragraph(escape(sender_phone[:64]), ps) sender_email_label = Paragraph("Email:", ps) sender_email_text = Paragraph(escape(sender_email[:64]), ps) regarding_label = Paragraph("Regarding:", ps) regarding_text = Paragraph(escape(regarding[:128]), ps) date_time_label = Paragraph("Date:", ps) date_time_text = Paragraph( strftime("%a, %d %b %Y %H:%M:%S (%Z)", localtime()), ps) total_pages_label = Paragraph("Total Pages:", ps) total_pages_text = Paragraph("%d" % total_pages, ps) data = [ [recipient_name_label, recipient_name_text], [recipient_fax_label, recipient_fax_text], ['', ''], [sender_name_label, sender_name_text], [sender_phone_label, sender_phone_text], [sender_email_label, sender_email_text], ['', ''], [date_time_label, date_time_text], [total_pages_label, total_pages_text], [regarding_label, regarding_text], ] LIST_STYLE = TableStyle([ #('LINEABOVE', (0,0), (-1,0), 2, colors.black), #('LINEABOVE', (0,1), (-1,-1), 0.25, colors.black), #('LINEBELOW', (0,-1), (-1,-1), 2, colors.black), ('ALIGN', (1, 1), (-1, -1), 'RIGHT'), ('VALIGN', (0, 0), (-1, -1), 'TOP'), ]) story.append(Table(data, style=LIST_STYLE)) story.append(HRFlowable(width='100%', color='black')) if message: MSG_STYLE = TableStyle([ #('LINEABOVE', (0,0), (-1,0), 2, colors.black), #('LINEABOVE', (0,1), (-1,-1), 0.25, colors.black), #('LINEBELOW', (0,-1), (-1,-1), 2, colors.black), ('ALIGN', (1, 1), (-1, -1), 'RIGHT'), ('VALIGN', (0, 0), (-1, -1), 'TOP'), #('SPAN', (-2, 1), (-1, -1)), ]) #story.append(HRFlowable(width='100%', color='black')) story.append(Spacer(1, 0.5 * inch)) # if preserve_formatting: # message = '\n'.join(message[:2048].splitlines()[:32]) # # data = [#[Paragraph("Comments/Notes:", ps), ''], # [Preformatted(escape(message), ps)],] # else: # data = [#[Paragraph("Comments/Notes:", ps), ''], # [Paragraph(escape(message[:2048]), ps), ''],] # # #story.append(HRFlowable(width='100%', color='black')) # #story.append(Table(data, style=MSG_STYLE)) if preserve_formatting: message = '\n'.join(message[:2048].splitlines()[:32]) story.append(Preformatted(escape(message), ps)) else: story.append(Paragraph(escape(message), ps)) if page_size == PAGE_SIZE_LETTER: pgsz = letter elif page_size == PAGE_SIZE_LEGAL: pgsz = legal else: pgsz = A4 if output is None: f_fd, f = utils.make_temp_file() else: f = output doc = SimpleDocTemplate(f, pagesize=pgsz) doc.build(story) return f
alignment=TA_LEFT)) row = [] ctr = 0 tmpfilename = os.path.join(request.folder, 'private', str(uuid4())) doc = SimpleDocTemplate(tmpfilename, pagesize=A4, rightMargin=30, leftMargin=30, topMargin=1 * inch, bottomMargin=.8 * inch) #,showBoundary=1) logo_path = request.folder + '/static/images/Merch.jpg' _limage = Image(logo_path) _limage.drawHeight = 2.55 * inch * _limage.drawHeight / _limage.drawWidth _limage.drawWidth = 2.25 * inch _limage.hAlign = 'CENTER' def landscape_header(canvas, doc): canvas.saveState() header = Table([[_limage]], colWidths='*') header.setStyle( TableStyle([ # ('GRID',(0,0),(-1,-1),0.5, colors.Color(0, 0, 0, 0.2)), ('FONTSIZE', (0, 0), (-1, -1), 12), ('FONTNAME', (0, 0), (-1, -1), 'Courier'), ('ALIGN', (0, 0), (0, -1), 'CENTER') ])) header.wrapOn(canvas, doc.width, doc.topMargin) header.drawOn(canvas, doc.leftMargin, doc.height + doc.topMargin - .3 * cm)
def createpdf(filehandle, content): """Funktion zum Schreiben der PDF-Datei""" story = [] # Alle Elemente des PDFs werden der Story hinzugefuegt # Styles fuer normale Paragraphen, gelesen aus dem SampleStyleSheet stylesheet = getSampleStyleSheet() h1 = stylesheet['Heading1'] h1.fontname = 'DGUVBold' h2 = stylesheet['Heading2'] h2.fontName = 'DGUVBold' h3 = stylesheet['Heading3'] h3.fontname = 'DGUVBold' code = stylesheet['Code'] bodytext = stylesheet['BodyText'] bodytext.fontName = 'DGUVBold' bodybold = stylesheet['BodyText'] bodybold.fontName = 'DGUVBold' # Weitere Styles fuer Paragraphen stylesheet.add( ParagraphStyle(name='smallbody', fontName='DGUVNormal', fontSize=9, spaceAfter=5)) stylesheet.add( ParagraphStyle(name='normal', fontName='DGUVNormal', fontSize=7.5, borderPadding=(5, 3, 3, 5))) stylesheet.add( ParagraphStyle(name='free', fontName='DGUVNormal', fontSize=7.5, borderPadding=0)) stylesheet.add( ParagraphStyle(name='right', fontName='DGUVNormal', fontSize=7.5, borderPadding=(5, 3, 3, 5), alignment=_r)) stylesheet.add( ParagraphStyle(name='center', fontName='DGUVNormal', fontSize=7.5, borderPadding=(5, 3, 3, 5), alignment=_c)) stylesheet.add( ParagraphStyle(name='bold', fontName='DGUVBold', fontSize=7.5, borderPadding=(5, 3, 3, 5))) stylesheet.add( ParagraphStyle(name='boldnew', fontName='DGUVBold', fontSize=9, borderPadding=(5, 3, 3, 5))) stylesheet.add( ParagraphStyle(name='boldright', fontName='DGUVBold', fontSize=7.5, borderPadding=(5, 3, 3, 5), alignment=_r)) stylesheet.add( ParagraphStyle(name='boldcenter', fontName='DGUVBold', fontSize=7.5, borderPadding=(5, 3, 3, 5), alignment=_c)) smallbody = stylesheet['smallbody'] bullet = stylesheet['Bullet'] bullet.fontSize = 9 bullet.fontName = 'DGUVNormal' entry_normal = stylesheet['normal'] entry_free = stylesheet['free'] entry_right = stylesheet['right'] entry_center = stylesheet['center'] entry_bold = stylesheet['bold'] entry_boldnew = stylesheet['boldnew'] entry_boldright = stylesheet['boldright'] entry_boldcenter = stylesheet['boldcenter'] # Add your logo to the page head. #im = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'images/bghw.jpg') #logo = Image(im, 6.22 * cm, 2 * cm) #logo.hAlign = 'RIGHT' #story.append(logo) #story.append(Spacer(0 * cm, 1.5 * cm)) im = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'images/logo_etem.jpg') logo = Image(im) logo.drawHeight = 6 * cm * logo.drawHeight / logo.drawWidth logo.drawWidth = 6 * cm logo.hAlign = 'RIGHT' # Datum datum = u"Datum: %s" % (strftime("%d.%m.%Y")) zeit = u"Zeit: %s" % (strftime("%H:%M:%S", localtime())) colWidths = [9.5 * cm, 2.75 * cm, 6.25 * cm] testcontent = u"Ergänzung der Gefährdungsbeurteilung für Bau- und Montagestellen zum Schutz vor Infektion mit dem Coronavirus" testheadline = u'<font color="#008c8e"><b>%s</b></font>' % testcontent toptable = [[Paragraph(testheadline, h2), Paragraph(u" ", bodytext), logo]] table = Table(toptable, colWidths=colWidths) table.hAlign = 'CENTER' story.append(table) story.append(Spacer(0 * cm, 0.5 * cm)) textbox_name = InteractiveTextField('Name', 250) textbox_datum = InteractiveTextField('Datum', 250) textbox_unternehmer = InteractiveTextField('Unternehmer/Unternehmerin', 250) story.append(Paragraph(u"Firma", entry_free)) story.append(textbox_name) story.append(Spacer(0 * cm, 0.1 * cm)) story.append(Paragraph(u"Datum", entry_free)) story.append(textbox_datum) story.append(Spacer(0 * cm, 0.1 * cm)) story.append(Paragraph(u"Unternehmer/Unternehmerin", entry_free)) story.append(textbox_unternehmer) story.append(Spacer(0 * cm, 0.5 * cm)) #story.append(Paragraph(absatz1, smallbody)) #story.append(Spacer(0 * cm, 0.25* cm)) #story.append(Paragraph(absatz2, smallbody)) #story.append(Spacer(0 * cm, 0.25* cm)) #story.append(Paragraph(absatz3, smallbody)) #story.append(Spacer(0 * cm, 0.25* cm)) #story.append(Paragraph(absatz4, smallbody)) #story.append(Spacer(0 * cm, 0.25* cm)) #for i in bulletlist: # listentry = "<bullet>•</bullet>%s" %i # story.append(Paragraph(listentry, bullet)) #story.append(Spacer(0 * cm, 0.25* cm)) #story.append(Paragraph(absatz5, smallbody)) ctt = [] ctt.append(Paragraph(absatz1, smallbody)) ctt.append(Paragraph(absatz2, smallbody)) ctt.append(Paragraph(absatz3, smallbody)) ctt.append(Paragraph(absatz4, smallbody)) for i in bulletlist: listentry = "<bullet>•</bullet>%s" % i ctt.append(Paragraph(listentry, bullet)) ctt.append(Paragraph(absatz5, smallbody)) story.append( BalancedColumns(ctt, nCols=2, needed=72, spaceBefore=0, spaceAfter=0)) story.append(Spacer(0 * cm, 1 * cm)) # optional: Festlegung fester Tabellenbreiten colWidths = [8 * cm, 1.25 * cm, 1.25 * cm, 8 * cm] checkbox_1 = InteractiveCheckBox('cb1') checkbox_2 = InteractiveCheckBox('cb2') textbox_1 = InteractiveTextField('zeile1') textbox_2 = InteractiveTextField('zeile2') checkbox_3 = InteractiveCheckBox('cb3') checkbox_4 = InteractiveCheckBox('cb4') textbox_3 = InteractiveTextField('zeile4') textbox_4 = InteractiveTextField('zeile5') mytable = [] tableheader = [ Paragraph(u"Organisation", entry_bold), Paragraph(u"ja", entry_boldcenter), Paragraph(u"nein", entry_boldcenter), Paragraph(u"Bemerkung/Maßnahme", entry_bold) ] mytable.append(tableheader) tablebody = [ Paragraph(zelle1, entry_normal), checkbox_1, checkbox_2, [textbox_1, textbox_2], ] mytable.append(tablebody) tablebody = [ Paragraph(zelle2, entry_normal), checkbox_3, checkbox_4, [textbox_3, textbox_4], ] mytable.append(tablebody) table = Table(mytable, repeatRows=1, colWidths=colWidths, style=[('GRID', (0, 0), (-1, -1), 1, grey), ('VALIGN', (0, 0), (-1, -1), 'MIDDLE')]) table.hAlign = "LEFT" story.append(table) story.append(PageBreak()) story.append(Spacer(0 * cm, 1 * cm)) story.append( Paragraph(u"Weitere Maßnahmen (z. B. Notfall- oder Pandemieplan):", smallbody)) story.append(Spacer(0 * cm, 0.5 * cm)) story.append(InteractiveTextField('massnahme1', 500)) story.append(InteractiveTextField('massnahme2', 500)) story.append(InteractiveTextField('massnahme3', 500)) story.append(InteractiveTextField('massnahme4', 500)) story.append(InteractiveTextField('massnahme5', 500)) story.append(InteractiveTextField('massnahme6', 500)) story.append(InteractiveTextField('massnahme7', 500)) story.append(InteractiveTextField('massnahme8', 500)) story.append(Spacer(0 * cm, 14 * cm)) schlusstext = u"""Diese Gefährdungsbeurteilung ergänzt die betriebliche Gefährdungsbeurteilung. Sie wurde vor Beginn der Arbeiten erstellt, die Maßnahmen wurden umgesetzt und auf Wirksamkeit überprüft. Die Mitarbeiter sind unterwiesen.""" schlussline = u'<font color="#008c8e"><b>%s</b></font>' % schlusstext story.append(Paragraph(schlussline, bodybold)) story.append(Spacer(0 * cm, 0.5 * cm)) textbox_name = InteractiveTextField('name_verantwortlich', 250) textbox_unterschrift = InteractiveTextField('datum_unterschrift', 250) colWidths = [9.25 * cm, 9.25 * cm] signtable = [[textbox_name, textbox_unterschrift], [ Paragraph(u"Name des Arbeitsverantwortlichen", entry_free), Paragraph(u"Datum, Unterschrift", entry_free) ]] table = Table(signtable, colWidths=colWidths) table.hAlign = 'CENTER' story.append(table) story.append(Spacer(0 * cm, 1 * cm)) colWidths = [8 * cm, 4.5 * cm, 6 * cm] datatable = [[ Paragraph(u" "), Paragraph(u"25.05.2020, Version 3", entry_free), Paragraph(u"Bestell-Nr. GB-C01", entry_boldright) ]] table = Table(datatable, colWidths=colWidths) story.append(table) doc = PdfBaseTemplate(filehandle, pagesize=A4) doc.build(story, canvasmaker=NumberedCanvas)
def image(self, name, width, height, halign='CENTER'): im = Image(name, width=width, height=height) im.hAlign = halign self._store_flowable(im)
def createpdf(filehandle, content): """Funktion zum Schreiben der PDF-Datei""" story = [] # Alle Elemente des PDFs werden der Story hinzugefuegt # Styles fuer normale Paragraphen, gelesen aus dem SampleStyleSheet stylesheet = getSampleStyleSheet() h1 = stylesheet['Heading1'] h1.fontname = 'DGUVBold' h2 = stylesheet['Heading2'] h2.fontName = 'DGUVBold' h3 = stylesheet['Heading3'] h3.fontname = 'DGUVBold' code = stylesheet['Code'] bodytext = stylesheet['BodyText'] bodytext.fontName = 'DGUVNormal' bodybold = stylesheet['BodyText'] bodybold.fontName = 'DGUVBold' # Weitere Styles fuer Paragraphen stylesheet.add( ParagraphStyle(name='smallbody', fontName='DGUVNormal', fontSize=9, spaceAfter=5)) stylesheet.add( ParagraphStyle(name='normal', fontName='DGUVNormal', fontSize=7.5, borderPadding=(5, 3, 3, 5))) stylesheet.add( ParagraphStyle(name='free', fontName='DGUVNormal', fontSize=7.5, borderPadding=0)) stylesheet.add( ParagraphStyle(name='right', fontName='DGUVNormal', fontSize=7.5, borderPadding=(5, 3, 3, 5), alignment=_r)) stylesheet.add( ParagraphStyle(name='center', fontName='DGUVNormal', fontSize=7.5, borderPadding=(5, 3, 3, 5), alignment=_c)) stylesheet.add( ParagraphStyle(name='bold', fontName='DGUVBold', fontSize=7.5, borderPadding=(5, 3, 3, 5))) stylesheet.add( ParagraphStyle(name='boldnew', fontName='DGUVBold', fontSize=9, borderPadding=(5, 3, 3, 5))) stylesheet.add( ParagraphStyle(name='boldright', fontName='DGUVBold', fontSize=7.5, borderPadding=(5, 3, 3, 5), alignment=_r)) stylesheet.add( ParagraphStyle(name='boldcenter', fontName='DGUVBold', fontSize=7.5, borderPadding=(5, 3, 3, 5), alignment=_c)) smallbody = stylesheet['smallbody'] bullet = stylesheet['Bullet'] bullet.fontSize = 9 bullet.fontName = 'DGUVNormal' entry_normal = stylesheet['normal'] entry_free = stylesheet['free'] entry_right = stylesheet['right'] entry_center = stylesheet['center'] entry_bold = stylesheet['bold'] entry_boldnew = stylesheet['boldnew'] entry_boldright = stylesheet['boldright'] entry_boldcenter = stylesheet['boldcenter'] coronastyles = {} coronastyles['h1'] = h1 coronastyles['h2'] = h2 coronastyles['h3'] = h3 coronastyles['code'] = code coronastyles['bodytext'] = bodytext coronastyles['bodybold'] = bodybold coronastyles['smallbody'] = smallbody coronastyles['bullet'] = bullet coronastyles['entry_normal'] = entry_normal coronastyles['entry_free'] = entry_free coronastyles['entry_right'] = entry_right coronastyles['entry_center'] = entry_center coronastyles['entry_bold'] = entry_bold coronastyles['entry_boldnew'] = entry_boldnew coronastyles['entry_boldright'] = entry_boldright coronastyles['entry_boldcenter'] = entry_boldcenter im = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'images/logo_etem.jpg') logo = Image(im) logo.drawHeight = 6 * cm * logo.drawHeight / logo.drawWidth logo.drawWidth = 6 * cm logo.hAlign = 'RIGHT' # Datum datum = u"Datum: %s" % (strftime("%d.%m.%Y")) zeit = u"Zeit: %s" % (strftime("%H:%M:%S", localtime())) colWidths = [9.5 * cm, 2.75 * cm, 6.25 * cm] formtitle = content.get('title') testheadline = u'<font color="#008c8e"><b>%s</b></font>' % formtitle toptable = [[Paragraph(testheadline, h2), Paragraph(u" ", bodytext), logo]] table = Table(toptable, colWidths=colWidths, style=[('VALIGN', (0, 0), (-1, -1), 'TOP')]) table.hAlign = 'CENTER' story.append(table) story.append(Spacer(0 * cm, 0.5 * cm)) textbox_name = InteractiveTextField('Name', 250) textbox_datum = InteractiveTextField('Datum', 250) textbox_unternehmer = InteractiveTextField('Unternehmer/Unternehmerin', 250) story.append(Paragraph(u"Firma", entry_free)) story.append(textbox_name) story.append(Spacer(0 * cm, 0.1 * cm)) story.append(Paragraph(u"Datum", entry_free)) story.append(textbox_datum) story.append(Spacer(0 * cm, 0.1 * cm)) story.append(Paragraph(u"Unternehmer/Unternehmerin", entry_free)) story.append(textbox_unternehmer) story.append(Spacer(0 * cm, 0.5 * cm)) for i in content.get('content'): if i.portal_type == 'Textblock': blockkey = 'textblock_%s' % i.UID() textblock = content.get(blockkey) if i.spalten == 2: story = create_columnblock(textblock, coronastyles, story) else: story = create_textblock(textblock, coronastyles, story) story.append(Spacer(0 * cm, 1 * cm)) elif i.portal_type == 'Tabelle': story.append(create_tabelle(i, coronastyles, 'nva' + i.UID())) story.append(Spacer(0 * cm, 1 * cm)) elif i.portal_type == 'Ueberschrift': story.append(Paragraph(i.title, coronastyles[i.format])) story.append(PageBreak()) story.append(Spacer(0 * cm, 1 * cm)) story.append( Paragraph(u"Weitere Maßnahmen (z. B. Notfall- oder Pandemieplan):", smallbody)) story.append(Spacer(0 * cm, 0.5 * cm)) story.append(InteractiveTextField('massnahme1', 500)) story.append(InteractiveTextField('massnahme2', 500)) story.append(InteractiveTextField('massnahme3', 500)) story.append(InteractiveTextField('massnahme4', 500)) story.append(InteractiveTextField('massnahme5', 500)) story.append(InteractiveTextField('massnahme6', 500)) story.append(InteractiveTextField('massnahme7', 500)) story.append(InteractiveTextField('massnahme8', 500)) story.append(Spacer(0 * cm, 14 * cm)) schlusstext = u"""Diese Gefährdungsbeurteilung ergänzt die betriebliche Gefährdungsbeurteilung. Sie wurde vor Beginn der Arbeiten erstellt, die Maßnahmen wurden umgesetzt und auf Wirksamkeit überprüft. Die Mitarbeiter sind unterwiesen.""" schlussline = u'<font color="#008c8e"><b>%s</b></font>' % schlusstext story.append(Paragraph(schlussline, bodybold)) story.append(Spacer(0 * cm, 0.5 * cm)) textbox_name = InteractiveTextField('name_verantwortlich', 250) textbox_unterschrift = InteractiveTextField('datum_unterschrift', 250) colWidths = [9.25 * cm, 9.25 * cm] signtable = [[textbox_name, textbox_unterschrift], [ Paragraph(u"Name des Arbeitsverantwortlichen", entry_free), Paragraph(u"Datum, Unterschrift", entry_free) ]] table = Table(signtable, colWidths=colWidths) table.hAlign = 'CENTER' story.append(table) story.append(Spacer(0 * cm, 1 * cm)) colWidths = [8 * cm, 4.5 * cm, 6 * cm] datum_version = "%s, Version %s" % (content.get('stand'), content.get('version')) bestellnummer = "Bestell-Nr. %s" % content.get('bestellnr') datatable = [[ Paragraph(u" "), Paragraph(datum_version, entry_free), Paragraph(bestellnummer, entry_boldright) ]] table = Table(datatable, colWidths=colWidths) story.append(table) doc = PdfBaseTemplate(filehandle, pagesize=A4) doc.build(story, canvasmaker=NumberedCanvas)
#pdfdoc.PDFCatalog.OpenAction = '<</S/JavaScript/JS(this.print\({bUI:true,bSilent:false,bShrinkToFit:true}\);)>>' styles = getSampleStyleSheet() styleN = styles['Normal'] styleH = styles['Heading1'] tmpfilename=os.path.join(request.folder,'private',str(uuid4())) doc = SimpleDocTemplate(tmpfilename,pagesize=A4, topMargin=1.8*inch, leftMargin=30, rightMargin=30)#, showBoundary=1) logo_path = request.folder + 'static/images/kds-logo.jpg' row = [] I = Image(logo_path) I.drawHeight = 1.25*inch*I.drawHeight / I.drawWidth I.drawWidth = 1.25*inch I.hAlign='RIGHT' darwish = Paragraph('''<font size=14><b>Darwish Group </b><font color="gray">|</font></font> <font size=9 color="gray"> Fleet Management System</font>''',styles["BodyText"]) ########### def _title(title): title = 'Title' return str(title) def _header_footer(canvas, doc): # Save the state of our canvas so we can draw on it canvas.saveState() # Header 'Vehicle Summary Report' header = Table([['',I],[darwish,''],['Fleet Mileage Report','']], colWidths=[None,90])
def createUrgentCoverPage(page_size=PAGE_SIZE_LETTER, total_pages=1, recipient_name='', recipient_phone='', recipient_fax='', sender_name='', sender_phone='', sender_fax='', sender_email='', regarding='', message='', preserve_formatting=False, output=None): s = getSampleStyleSheet() story = [] i = Image(os.path.join(prop.image_dir, 'other', 'urgent_title.png'), width=424, height=92) i.hAlign = 'LEFT' story.append(i) story.append(Spacer(1, inch)) story.append(HRFlowable(width='100%', color='black')) ps = ParagraphStyle(name='normal', fontName='Times-Roman', #fontName='STSong-Light', #fontName='UMing', fontSize=12) recipient_name_label = Paragraph("To:", ps) recipient_name_text = Paragraph(escape(recipient_name[:64]), ps) recipient_fax_label = Paragraph("Fax:", ps) recipient_fax_text = Paragraph(escape(recipient_fax[:64]), ps) recipient_phone_label = Paragraph("Phone:", ps) recipient_phone_text = Paragraph(escape(recipient_phone[:64]), ps) sender_name_label = Paragraph("From:", ps) sender_name_text = Paragraph(escape(sender_name[:64]), ps) sender_phone_label = Paragraph("Phone:", ps) sender_phone_text = Paragraph(escape(sender_phone[:64]), ps) sender_email_label = Paragraph("Email:", ps) sender_email_text = Paragraph(escape(sender_email[:64]), ps) regarding_label = Paragraph("Regarding:", ps) regarding_text = Paragraph(escape(regarding[:128]), ps) date_time_label = Paragraph("Date:", ps) date_time_text = Paragraph(strftime("%a, %d %b %Y %H:%M:%S (%Z)", localtime()), ps) total_pages_label = Paragraph("Total Pages:", ps) total_pages_text = Paragraph("%d" % total_pages, ps) data = [[recipient_name_label, recipient_name_text], [recipient_fax_label, recipient_fax_text], ['', ''], [sender_name_label, sender_name_text], [sender_phone_label, sender_phone_text], [sender_email_label, sender_email_text], ['', ''], [date_time_label, date_time_text], [total_pages_label, total_pages_text], [regarding_label, regarding_text],] LIST_STYLE = TableStyle([#('LINEABOVE', (0,0), (-1,0), 2, colors.black), #('LINEABOVE', (0,1), (-1,-1), 0.25, colors.black), #('LINEBELOW', (0,-1), (-1,-1), 2, colors.black), ('ALIGN', (1,1), (-1,-1), 'RIGHT'), ('VALIGN', (0, 0), (-1, -1), 'TOP'), ]) story.append(Table(data, style=LIST_STYLE)) story.append(HRFlowable(width='100%', color='black')) if message: MSG_STYLE = TableStyle([#('LINEABOVE', (0,0), (-1,0), 2, colors.black), #('LINEABOVE', (0,1), (-1,-1), 0.25, colors.black), #('LINEBELOW', (0,-1), (-1,-1), 2, colors.black), ('ALIGN', (1,1), (-1,-1), 'RIGHT'), ('VALIGN', (0, 0), (-1, -1), 'TOP'), #('SPAN', (-2, 1), (-1, -1)), ]) #story.append(HRFlowable(width='100%', color='black')) story.append(Spacer(1, 0.5*inch)) # if preserve_formatting: # message = '\n'.join(message[:2048].splitlines()[:32]) # # data = [#[Paragraph("Comments/Notes:", ps), ''], # [Preformatted(escape(message), ps)],] # else: # data = [#[Paragraph("Comments/Notes:", ps), ''], # [Paragraph(escape(message[:2048]), ps), ''],] # # #story.append(HRFlowable(width='100%', color='black')) # #story.append(Table(data, style=MSG_STYLE)) if preserve_formatting: message = '\n'.join(message[:2048].splitlines()[:32]) story.append(Preformatted(escape(message), ps)) else: story.append(Paragraph(escape(message), ps)) if page_size == PAGE_SIZE_LETTER: pgsz = letter elif page_size == PAGE_SIZE_LEGAL: pgsz = legal else: pgsz = A4 if output is None: f_fd, f = utils.make_temp_file() else: f = output doc = SimpleDocTemplate(f, pagesize=pgsz) doc.build(story) return f