É comum que ao criar um documento seja necessário definir as margens. Neste post você verá como é simples definir as margens de um documento pdf; vale a pena lembrar que podemos trabalhar com medidas nas mais diversas unidades como centímetros, polegadas ou pixels. De fato o sistema de medidas padrão utilizado deve ser convertido na unidade de medida tipográfica padrão, o conhecido ponto. Só para ilustrar um exemplo: em 1 polegada existem 72 pontos; ou seja, no final das contas devemos converter tudo em pontos.
Por exemplo, se você quiser criar em um documento pdf um retângulo do tamanho de uma página A4 (é óbvio que o tamanho da folha deverá ser maior do que isso), você tem que calcular o número de pontos; vejamos:
2,54 = 1 polegada
Tamanho do papel em polegadas:
21cm / 2,54 = 8,2677 polegadas
Tamanho em pontos (Converte as polegadas em pontos)
8,2677 * 72 = 595 pontos
29,7cm / 2,54 = 11,6929 polegadas
11,6929 * 72 = 842 pontos
Então o tamanho do retângulo é 595 x 842 pontos
O valor padrão para as bordas é de 36 pontos, o que corresponde a metade de uma polegada.
public string TextoToPdfBordas()
{
string retorno = string.Empty;
//Cria o objeto documento.
Document documento = new Document(PageSize.A4, 36, 36, 72, 72);
try
{
//Escreve o arquivo documento.
PdfWriter.GetInstance(documento, new FileStream("Parte4.pdf", FileMode.Create));
//Abre o documento
documento.Open();
//Adicionaremos alguns parágrafos ao documento.
Paragraph paragrafo = new Paragraph();
//Perceba que aqui definimos o tipo de alinhamento.
paragrafo.Alignment = Element.ALIGN_JUSTIFIED;
for (int i = 0; i < 10; i++)
{
paragrafo.Add("Olá mundo!! Esta é a linha: " + (i + 1).ToString());
}
//Adiciona o parágrafo ao documento.
documento.Add(paragrafo);
//Fecha o documento
documento.Close();
retorno = "Arquivo criado com sucesso!";
}
catch (DocumentException e)
{
retorno = e.Message;
}
catch(IOException e)
{
retorno = e.Message;
}
catch(Exception e)
{
retorno = e.Message;
}
return retorno;
}
Posts Relacionados:
- Criando um documento Pdf com iTextSharp – Parte III (Rotacionar Folha)
- Criando um documento Pdf com iTextSharp – Parte II
- Criando um documento Pdf com iTextSharp – Parte V (MetaDados)
- Criando um documento pdf com iTextSharp – Parte I
- Criando um documento Pdf com iTextSharp – Parte VI (Marca D´água)
- Criando um documento Pdf com iTextSharp – Parte VII (Estilos)
- Criando um documento Pdf com iTextSharp – Parte VIII (Criptografia)



3 Respostas to “Criando um documento Pdf com iTextSharp – Parte IV (Tamanho da Página)”
Wagner Figueiredo
6 months ago
Olá Pablo, estou utilizando o itextsharp para a geração de um relatório para impressão em formulário contínuo. Cada folha do formulário equivale a metade de uma folha A4. No arquivo que é gerado pelo meu programa, a visualização fica ok, porém quando imprimo o documento, a impressão sai invertida. Saberias me dizer o por que disso? Obrigado.
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;
}
}
}
Pablo Roveroni
5 months ago
Wagner,
não tive este tipo de problema. Tentarei simular o problema aqui e assim que obtiver uma resposta te passo.
[]s