def test_position(): repr(HorizontalSpace(size='20pt', star=False)) repr(VerticalSpace(size="20pt", star=True)) # Test alignment environments center = Center() center.append("append") repr(center) right = FlushRight() right.append("append") repr(right) left = FlushLeft() left.append("append") repr(left) minipage = MiniPage(width=r"\textwidth", height="10pt", pos='t', align='r', content_pos='t', fontsize="Large") minipage.append("append") repr(minipage) textblock = TextBlock(width="200", horizontal_pos="200", vertical_pos="200", indent=True) textblock.append("append") textblock.dumps() repr(textblock)
def append_liquor_list(doc, df, own_page): # TODO no interaction with dataframe? kinds = df[df.Category.isin(['Spirit', 'Vermouth', 'Liqueur'])][['Kind', 'Type']] if own_page: print "Appending list as new page" doc.append(NewPage()) listing = SamepageEnvironment() block = Center() if not own_page: block.append(HRuleFill()) block.append(Command('\\')) block.append(VerticalSpace('16pt')) block.append(TitleText("Included Ingredients")) block.append(Command('\\')) listing.append(block) listing.append(VerticalSpace('12pt')) cols = add_paracols_environment(listing, 2, '8pt', sloppy=False) with cols.create(FlushRight()): for item in kinds.Kind: cols.append(LargeText(item)) cols.append(Command('\\')) cols.append(Command('switchcolumn')) with cols.create(FlushLeft()): for item in kinds.Type: cols.append(LargeText(italic(item))) cols.append(Command('\\')) doc.append(listing)
def create_pdf(self) -> Document: questions = functools.reduce( lambda a, b: a + b, map(lambda x: x.get_questions(), self.questions), []) doc = Document() doc.preamble.append(Package('titling')) for i in range(1, self.count + 1): random.shuffle(questions) with doc.create(Center()): doc.append(HugeText(self.header)) doc.append(bold('Nombre:')) doc.append(LineBreak()) doc.append(bold('ID:')) doc.append(LineBreak()) with doc.create(FlushRight()): doc.append(LargeText(f'Examen tipo {i}')) enum = Enumerate() for question in questions: question.append_to_document(doc, enum) doc.append(NewPage()) doc.append('Guía de respuestas') doc.append(enum) doc.append(NewPage()) doc.append(Command('setcounter', ['section', '0'])) return doc
def add_article(self, title, url, data, escape=False): self.append(NoEscape(r'\chapter{')) self.append(title) self.append(NoEscape(r'}')) with self.create(FlushRight()): self.append(url) if escape: self.append(data) else: self.append(NoEscape(data)) self.append(NewPage())
def titulo(doc, txt_titulo, txt_subtitulo): eqparbox = r''' \eqparbox{a}{\relax\ifvmode\raggedleft\fi \underline{%s} \\ \bigskip %s } \eqparbox{b}{ \includegraphics[width=100px]{logo-extensao-menor.jpg} } ''' eqparbox %= txt_titulo, txt_subtitulo with doc.create(FlushRight()) as fr: fr.append(NoEscape(eqparbox))
def gerar_pdf_certificado(certificado): # Configurações da classe geometry_options = {'landscape': True, 'left': '2cm', 'right': '1cm'} doc = Document(geometry_options=geometry_options, lmodern=False, document_options=['a4paper', 'brazil'], inputenc=None, fontenc=None, font_size='footnotesize') # Pacotes doc.packages.add(Package('microtype')) doc.packages.add(Package('indentfirst')) doc.packages.add(Package('graphicx')) doc.packages.add(Package('calc')) doc.packages.add(Package('fontspec')) options_background = ['scale=1', 'opacity=1', 'angle=0'] doc.packages.add(Package('background', options=options_background)) doc.packages.add(Package('csquotes')) # Configurações (preâmbulo) doc.preamble.append(Command('MakeOuterQuote', '\"')) # coverte aspas automaticamente, sem precisar de `` e '' doc.preamble.append(Command('renewcommand', arguments=[Command('baselinestretch'), '1.5'])) doc.preamble.append(Command('setlength', arguments=[Command('parindent'), NoEscape(r'.35\textwidth')])) doc.preamble.append(Command('setlength', arguments=[Command('parskip'), '0.2cm'])) doc.preamble.append(Command('setlength', arguments=[Command('emergencystretch'), '5pt'])) # Imagem de fundo doc.preamble.append(NoEscape(r'\backgroundsetup{ contents=\includegraphics{modelo-certificado-20.pdf} }')) # Diretório das imagens img_dir = '{}/base/static/img/'.format(BASE_DIR) # necessário barra no final doc.preamble.append(UnsafeCommand('graphicspath', '{{{}}}'.format(img_dir))) # Início do documento doc.append(UnsafeCommand('setmainfont', 'Latin Modern Sans', ['SizeFeatures={Size=16}', 'Ligatures=TeX'])) doc.append(Command('pagestyle', 'empty')) doc.append(Command('BgThispage')) doc.append(VerticalSpace(size='2cm', star=True)) with doc.create(FlushRight()) as fr: fr.append(StandAloneGraphic('titulo-certificado.pdf', 'width=6.5cm')) fr.append(LineBreak()) doc.append(VerticalSpace(size=NoEscape('-1cm'), star=True)) doc.append(Command('Large')) # Usado para o nome dos meses ('%B') locale.setlocale(locale.LC_ALL, 'pt_BR.UTF-8') inicio = certificado.relatorio.periodo_inicio.strftime('%d de %B de %Y').lower() fim = certificado.relatorio.periodo_inicio.strftime('%d de %B de %Y').lower() # TODO: tá faltando coisa texto_principal = r''' Certificamos que \textbf{{{nome}}} atuou como {funcao}, {sob_coordenacao}no período de {inicio} a {fim}, na cidade de Foz do Iguaçu -- Paraná, com a atividade de extensão: "\textbf{{{titulo}}}", com carga horária de {carga_horaria_total} horas. ''' if certificado.funcao.nome == 'Coordenador(a)': sob_coordenacao = '' else: nome_coordenador = certificado.relatorio.projeto_extensao.coordenador.nome_completo sob_coordenacao = r'sob a coordenação de \textbf{{{}}}, '.format(escape_latex(nome_coordenador)) texto_principal = texto_principal.format(nome=escape_latex(certificado.nome), funcao=certificado.funcao.nome.lower(), sob_coordenacao=sob_coordenacao, inicio=inicio, fim=fim, titulo=escape_latex(certificado.relatorio.projeto_extensao.titulo), carga_horaria_total=str(certificado.carga_horaria_total).split('.')[0]) # texto_principal = NoEscape(r''' # Certificamos que \textbf{Adriana de Oliveira Gomes} participou como bolsista do Programa de Apoio a Inclusão Social em Atividades de Extensão -- Convênio No 750/2014 -- Fundação Araucária, Edital 05/2014-PROEX, sob a orientação do (a) professor (a) \textbf{Fernando Amâncio Aragão}, no período de outubro/2014 a setembro/2015, com a atividade de extensão: \textbf{''Atendimento fisioterapêutico para pacientes com sequelas neurológicas baseada em tarefas funcionais.''}, com carga horária de 960 (novecentas e sessenta) horas. # ''') doc.append(NoEscape(texto_principal)) doc.append(VerticalSpace(size='1.5cm', star=True)) doc.append(HorizontalSpace(size='7cm', star=True)) dia = timezone.now().strftime('%d') mes = timezone.now().strftime('%B') ano = timezone.now().strftime('%Y') data = NoEscape(r'Foz do Iguaçu, {} de {} de {}'.format(dia, mes, ano)) largura = Command('widthof', data).dumps() with doc.create(MiniPage(width=largura)) as mini: with mini.create(Center()) as center: center.append(data) center.append(NewLine()) center.append(NewLine()) center.append(NewLine()) center.append('Coordenador do Projeto de Extensão') center.append(NewLine()) center.append(NewLine()) center.append(NewLine()) center.append('Diretor de Centro') os.system('mkdir -p ' + PDF_DIR) filepath = '{}/certificado_{}'.format(PDF_DIR, str(certificado.id)) doc.generate_pdf(filepath, clean_tex=False, compiler=pdfutils.COMPILER, compiler_args=pdfutils.COMPILER_ARGS) return filepath
def fill_title(self, title, url, date): self.append(NoEscape(r'\chapter{%s}' % title)) with self.create(FlushRight()): self.append(date) with self.create(FlushRight()): self.append(url)