Geração em massa de certificados usando Python e SVG

Nos dias 09 e 10 de julho de 2011 foi realizada a segunda convenção de formação e organização do PoliGNU no presente ano.

Uma das decisões que tomamos foi a de oferecer um certificado de participação em nossos cursos.

Como sempre, tudo que fazemos envolve software livre, e a geração de nossos certificados não poderia ser diferente.

Primeiramente um certificado modelo foi criado no Inkscape, deixando indicado o nome da pessoa certificada. Pelo fato de o formato padrão do inkscape ser o SVG, que é um formato aberto, podemos alterar parte do conteúdo utilizando qualquer editor de texto, ou mesmo algum script de substituição.

O certificado conta com um QRCode, que é um código, como se fosse código de barras, que representa uma URL no site do PoliGNU que contém a lista dos participantes do referido curso, além do programa do mesmo. Este QRCode tem que ser gerado para cada curso!

Ok, já temos um certificado bonitinho! Mas como fazer para, sobre esse modelo, gerar um certificado para cada participante?

Bem, isso poderia ser feito de diversas maneiras. A maneira escolhida foi fazer isso com python.

Assim, criei um script em python que, sobre o arquivo svg modelo, gera um arquivo PNG para cada nome constante numa lista.

O código fonte que faz isso, além dos arquivos modelos, podem ser encotrados em:

https://gitorious.org/polignu/certificados

Anexo segue o código fonte que realiza este processo:

#!/usr/bin/python<br /># coding: utf-8<br />import os, sys, re<br />#import urllib, urllib2<br /><br />#nome_do_arquivo_svg_base<br />svgbase = &quot;cert&quot;<br />original = open(svgbase+&quot;.svg&quot;).read()<br /><br />#Função geradora de QRCode<br />#def geraQRCode():<br />##link exemplo para geração de qrcode de uma url (<a href="http://polignu.org/component/content/article/82-latex/138-20111semnivel1">http://polignu.org/component/content/article/82-latex/138-20111semnivel1</a>)<br />##<a href="http://chart.apis.google.com/chart?cht=qr&amp;chs=120x120&amp;chl=http%3A%2F%2Fhttp%3A%2F%2Fpolignu.org%2Fcomponent%2Fcontent%2Farticle%2F82-latex%2F138-20111semnivel1<br">http://chart.apis.google.com/chart?cht=qr&amp;chs=120x120&amp;chl=http%3...</a> />#&nbsp;&nbsp;&nbsp; link = raw_input(&#39;Qual a url com a lista de verificação para se gerar o QRCode dos certificados?&#39;)<br />#&nbsp;&nbsp;&nbsp; link_encoded = urllib.urlencode(link)<br /><br />def geraPNG(arquivo):<br />print &quot;&nbsp;&nbsp;&nbsp; gerando certificado em png&quot;<br />#gerando o PNG baseado no SVG<br />comando = &#39;inkscape %s.svg -C -d 150 -e certificados/%s.png&#39; % (arquivo, arquivo)<br />os.system(comando)<br />print &quot;&nbsp;&nbsp;&nbsp; removendo arquivo svg&quot;<br />#removendo o SVG<br />remover = &#39;rm %s.svg&#39; % (arquivo)<br />os.system(remover)<br /><br />def geraSVG(arquivo,nome):<br />print &quot;&nbsp;&nbsp;&nbsp; copiando o arquivo svg base para &quot; + arquivo + &quot;.svg&quot;<br />#copiando o arquivo do svg original para ser usado de base<br />comando = &#39;cp cert.svg %s.svg&#39; % arquivo<br />os.system(comando)<br />#substituindo o nome d@ aprovad@ no arquivo svg<br />novoCert = open(arquivo + &quot;.svg&quot;,&#39;r+&#39;)<br />novoCert.write( re.sub(&quot;___NOME___&quot;,nome,original) )<br />#aqui deve ser chamado o gerador de QRCode e, em seguida,<br />#ele deve ser adicionado ao arquivo svg.<br />novoCert.close()<br /><br />def geraCertificados():<br />#abre a lista de nomes das pessoas aprovadas<br />aprovados = open(&quot;listaNomes&quot;)<br />for aprovado in aprovados:<br />#removendo a quebra de linha do final da variavel<br />nome = aprovado.rstrip(&quot;\n&quot;)<br />print &quot;Gerando certificado de &quot; + nome + &quot;:&quot;<br />#removendo espaços do nome do arquivo<br />arquivo = nome.replace(&quot; &quot;,&quot;_&quot;)<br />#gerando SVG<br />geraSVG(arquivo,nome)<br />#gerando PNG<br />geraPNG(arquivo)<br />print &quot;&quot;<br /><br />geraCertificados()<br />#geraQRCode()

#!/usr/bin/python<br># coding: utf-8<br>import os, sys, re<br>#import urllib, urllib2

Não há comentários.

Comentar