Adicionando Estilos
Neste post demonstrarei como podemos adicionar estilos ao documento, é claro que a gama de estilos na qual podemos utilizar é muito maior das que aqui descrevo; cabe a você a dar uma olhada nas diversas opções que ele nos proporciona e nas infinitas combinações na quais nós podemos fazer.
O exemplo a seguir cria não um mas três arquivos com combinações diferentes das páginas. Contudo perceba que o conteúdo é o mesmo, ou seja, podemos criar uma série de documentos com diversas configurações de layout sem alterar o conteúdo.
Então chega de conversa e vamos ao código:
public string PdfComPreferencias()
{
//Cria o objeto documento
Document documento = new Document();
try
{
//Cria o arquivo com o conteúdo do pdf-stream
PdfWriter writerA = PdfWriter.GetInstance(documento, new FileStream(@"C:\PdfParte7a.pdf", FileMode.Create));
PdfWriter writerB = PdfWriter.GetInstance(documento, new FileStream(@"C:\PdfParte7b.pdf", FileMode.Create));
PdfWriter writerC = PdfWriter.GetInstance(documento, new FileStream(@"C:\PdfParte7c.pdf", FileMode.Create));
//Informa seta as preferencias de cada um dos arquivos pdf
writerA.ViewerPreferences = PdfWriter.PageLayoutTwoColumnLeft;
writerB.ViewerPreferences = PdfWriter.HideMenubar | PdfWriter.HideToolbar;
writerC.ViewerPreferences = PdfWriter.PageLayoutTwoColumnLeft | PdfWriter.PageModeFullScreen | PdfWriter.NonFullScreenPageModeUseThumbs;
//Abre o documento
documento.Open();
//Adiciona a marca d'água
Image watermark = Image.GetInstance(@"C:\watermark.jpg");
watermark.SetAbsolutePosition(200, 340);
documento.Add(watermark);
//Adiciona o cabeçalho na página 1
HeaderFooter cabecalho = new HeaderFooter(new Phrase("Este é o cabeçalho da página"), true);
documento.Header = cabecalho;
//Rotaciona a página a partir da página 2
documento.SetPageSize(PageSize.A4.Rotate());
//Reposiciona a marca d'água
//Adiciona a marca d'água
documento.Add(watermark);
//Adiciona rodapé à página 2
HeaderFooter rodape = new HeaderFooter(new Phrase("Página: "), true);
documento.Footer = rodape;
//Adicionando conteúdo as páginas
//Página 1
documento.Add(new Paragraph("Olá Mundo!!!"));
//Adiciona uma nova página
documento.NewPage();
//Página 2
//Adicionando uma nova página
documento.Add(new Paragraph("Olá planeta que o meteoro irá destruir!!!"));
//Remove o header do início da página 3
documento.ResetHeader();
//Adiciona uma nova página
documento.NewPage();
//Página 3
documento.Add(new Paragraph("Olá Explosão que vai matar todo mundo!!"));
documento.Add(new Paragraph("Repare o cabeçalho já era!!!"));
documento.Add(watermark);
//Reseta a contagem das páginas
documento.ResetPageCount();
//Adiciona uma nova página
documento.NewPage();
//Página 4
documento.Add(new Paragraph("Quem sabe os EUA não salvam o mundo?!?!?!"));
documento.Add(new Paragraph("Repare que o número das páginas foi resetado!!!"));
}
catch (DocumentException e)
{
return e.Message;
}
catch (IOException e)
{
return e.Message;
}
catch (Exception e)
{
return e.Message;
}
//Fechar o documento
documento.Close();
return "Arquivo gerado com sucesso!!!";
}
Posts Relacionados:
- Criando um documento Pdf com iTextSharp – Parte VI (Marca D´água)
- Criando um documento Pdf com iTextSharp – Parte II
- Criando um documento Pdf com iTextSharp – Parte V (MetaDados)
- Criando um documento Pdf com iTextSharp – Parte IV (Tamanho da Página)
- Criando um documento Pdf com iTextSharp – Parte VIII (Criptografia)
- Criando um documento Pdf com iTextSharp – Parte III (Rotacionar Folha)
- Criando um documento pdf com iTextSharp – Parte I



3 Respostas to “Criando um documento Pdf com iTextSharp – Parte VII (Estilos)”
Besaleel
1 year ago
Legal, gostei dos exemplos bem simples, mas,… se eu quiser imprimir uma URL, que é mais interessante.
Por exemplo, vamos dar mais utilidade a ferramenta iTextSharp:
Eu tenho um relatório em HTML ( http://meusite.com/rel.aspx?id=91881 )
quero disponibilizar esses dados em PDF.
Como faço isso usando o iTextSharp?
Não encontrei nenhuma referencia a URL na classe Documento.
Marcelo Moreira
6 months ago
Utilizo a rotina abaixo para gerar PDF, o grande problema é que utilizo o FCKEditor componente que permite edição de texto via web. Ex: o usuário digita um texto a esquerda e coloca uma imagem a direita deste texto, ao invés de exibir no PDF exatamente assim, ele exibi o texto e depois na linha debaixo o texto alinhado a direita.
Acredito que o erro esteja nesta linha:
ArrayList array = HTMLWorker.ParseToList(tempReader, new StyleSheet());
Como ele monta um array fica em linhas diferentes o texto e depois a imagem.
Algum de voces tem alguma solução para isto?
private void GeraPDFItextSharp(string html, string fileName, string author, string subject)
{
if (!string.IsNullOrEmpty(html) && !string.IsNullOrEmpty(fileName) &&
!
string.IsNullOrEmpty(author) && !string.IsNullOrEmpty(subject))
{
try
{
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AddHeader(“content-disposition”, string.Format(“attachment;filename={0}.pdf”, fileName));
HttpContext.Current.Response.Charset = string.Empty;
HttpContext.Current.Response.ContentType = “application/pdf”;
HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;
EnableViewState =
true;
int ContadorPagina = 1;
Document document = new Document(PageSize.A4, 36, 36, 38, 30);
PdfWriter pdfWriter = PdfWriter.GetInstance(document, HttpContext.Current.Response.OutputStream);
document.AddAuthor(author);
document.AddSubject(subject);
document.Open();
//Adiciona a marca d’gua
iTextSharp.text.
Image Topo = iTextSharp.text.Image.GetInstance(@”" + ConfigurationManager.AppSettings["Imagens"].ToString() + “/header_veirano_novo.jpg”);
iTextSharp.text.
Image Rodape = iTextSharp.text.Image.GetInstance(@”" + ConfigurationManager.AppSettings["Imagens"].ToString() + “/rodapeClipping.png”);
document.SetPageSize(
PageSize.A4);
Paragraph ph = new Paragraph();
ph.Add(
new Chunk(“\n”));
Topo.SetAbsolutePosition(36, 785);
Rodape.SetAbsolutePosition(36, 10);
document.Add(Topo);
document.Add(ph);
document.Add(Rodape);
document.Add(ph);
string tempFile = Path.GetTempFileName();
using (StreamWriter tempwriter = new StreamWriter(tempFile, false))
{
tempwriter.Write(html);
}
using (StreamReader tempReader = new StreamReader(tempFile))
{
ArrayList array = HTMLWorker.ParseToList(tempReader, new StyleSheet());
for (int i = 0; i < array.Count; i++)
{
document.Add((
IElement)array[i]);
if (pdfWriter.PageNumber != ContadorPagina)
{
Paragraph phi = new Paragraph();
phi.Add(
new Chunk("\n"));
Topo.SetAbsolutePosition(36, 785);
Rodape.SetAbsolutePosition(36, 10);
document.Add(Topo);
document.Add(phi);
document.Add(Rodape);
document.Add(phi);
}
ContadorPagina = pdfWriter.PageNumber;
}
}
document.Close();
pdfWriter.Close();
File.Delete(tempFile);
HttpContext.Current.Response.Flush();
}
catch (Exception ex)
{
throw ex;
}
}
}
hermes handbags
4 months ago
You appear to be incredibly specialist in the way you write.