Ao final do dotNETday eu disse aos participantes que poderíamos emitir um certificado de participação nas palestras. Só que recebemos mais de 300 pedidos. Isso complicou um pouco a "dinâmica da coisa"...
A solução foi eu criar uma classe que pode printar o texto desejado em cima de uma imagem base, com o fundo do mesmo.
Agora é só colocar numa página ASP.Net, onde o usuário preencha os seus dados e crie dinamicamente o certificado.


using System;
namespace Certificado
{
class Program
{
static void Main(string[] args)
{
new Core().CriarCertificado("Beta Ray Bill",
"Participou do evento online dotNETday - parte 1",
"com duração de 12 horas, no dia 03/04/10, às 09:00h",
"Abertura (Luciano Palma)",
"O que há de novo no Visual Studio 2010 (Djonatas Tenfen)",
"O que há de novo no .NET Framework 4 (Rogério Prudente)",
"O que há de novo no C# 4 e no Visual Basic 10 (Agnaldo Diogo dos Santos)");
System.Diagnostics.Process.Start(Environment.CurrentDirectory);
}
}
}
using System;
using System.Drawing;
namespace Certificado
{
public class Core
{
private String nomeImagem = "certificado.png";
public Image GetImage()
{
Image imagem = null;
try
{
imagem = Image.FromFile(this.nomeImagem);
}
catch { }
return imagem;
}
public void CriarCertificado(String nome,
String linha1, String linha2, String linha3,
String linha4, String linha5, String linha6)
{
Image imagem = this.GetImage();
if (imagem != null)
{
using (Graphics grafico = Graphics.FromImage(imagem))
{
Brush pincel = new SolidBrush(Color.Black);
Font fonteNome = new Font("Courier New", 36,
FontStyle.Bold | FontStyle.Italic);
Font fonteEvento = new Font("Courier New", 24,
FontStyle.Bold | FontStyle.Italic);
Font fontePalestras = new Font("Courier New", 12,
FontStyle.Bold | FontStyle.Italic);
grafico.DrawString(nome, fonteNome, pincel, 200, 1000);
grafico.DrawString(linha1, fonteEvento, pincel, 200, 1400);
grafico.DrawString(linha2, fonteEvento, pincel, 200, 1600);
grafico.DrawString(linha3, fontePalestras, pincel, 1200, 2000);
grafico.DrawString(linha4, fontePalestras, pincel, 1200, 2050);
grafico.DrawString(linha5, fontePalestras, pincel, 1200, 2100);
grafico.DrawString(linha6, fontePalestras, pincel, 1200, 2150);
}
imagem.Save(nome + " - " + this.nomeImagem);
}
}
}
}