Criptografando arquivos
Depois deste longo período de dedos taciturnos, retorno com mais um post sobre como criar um arquivo pdf criptografado.
Bem… quem lida com informações confidenciais sabe que muitas vezes é necessário não só garantirmos que o acesso a um arquivo seja restrito, mas também o seu conteúdo. E o iTextSharp nos possibilita criar arquivos com criptografia com 3 tipos distintos:
- 40 bits
- 128 bits
- X509
Contudo iremos implementar neste post um método para criptografar em 40bits e outro em 128bits.
Além de definirmos o nível de criptografia que desejamos utilizar, podemos também definir uma senha para o usuário e outra para o grupo na qual utilizará o arquivo. Além disso, podemos definir o que desejamos permitir no arquivo. São diversas as permissões e você pode associar diversas para que fiquem do jeito que você deseja. Para combinar mais de uma permissão, basta adicionar um | (pipe) após a última permissão.
Segue abaixo a lista com as permissões e suas descrições:
| Permissão | Descrição |
| AllowScreenReaders | Cópia do conteúdo para acessibilidade |
| AllowPrinting | Impressão |
| AllowModifyContents | Preenchimento de campos de formulários |
| AllowModifyAnnotations | Preenchimento de campos de formulários |
| AllowFillIn | Preenchimento de campos de formulários |
| AllowDegradedPrinting | Impressão |
| AllowCopy | Cópia do conteúdo e Cópia do conteúdo para acessibilidade |
| AllowAssembly | Proibição Total (Não pode nada!!! Só abrir e ler (Caso tenha a senha)) |
Após criar os arquivos, clique na aba de segurança do pdf e verifique as permissões do arquivo.
Agora vamos ao que interessa, o código propriamente dito:
Criptografia com 40bits:
public string Criptografar40bits(string Texto)
{
string senhausuario = "123456";
Document documento = new Document(PageSize.A4, 25, 25, 20, 20);
try
{
PdfWriter escritorpdf = PdfWriter.GetInstance(documento, new FileStream(@"C:\Exemplo8a.pdf", FileMode.Create));
//Define a criptografia do arquivo, a senha do usuário e o tipo de permissão do arquivo.
escritorpdf.SetEncryption(PdfWriter.STRENGTH40BITS,
//Define a senha do usuário
senhausuario,
//Define a senha do grupo (caso haja)
null,
//Define as permissões sobre o arquivo. Perceba que neste caso estou utilizando duas permissões.
PdfWriter.AllowCopy | PdfWriter.AllowPrinting);
documento.Open();
documento.Add(new Paragraph(Texto));
documento.Close();
}
catch (Exception e)
{
return e.StackTrace;
}
return "Arquivo Exemplo8a.pdf gerado com sucesso!!!";
}
Criptografia com 128bits:
public string Criptografar128bits(string Texto)
{
string senhausuario = "123456";
string senhagrupo = "123";
Document documento = new Document(PageSize.A4, 25, 25, 20, 20);
try
{
PdfWriter escritorpdf = PdfWriter.GetInstance(documento, new FileStream(@"C:\Exemplo8b.pdf", FileMode.Create));
//Define a criptografia do arquivo como 128bits
escritorpdf.SetEncryption(PdfWriter.STRENGTH128BITS,
//Define a senha do usuário
senhausuario,
//Define a senha do grupo
senhagrupo,
//Define o tipo de permissão que quero dar para o arquivo
PdfWriter.AllowAssembly);
documento.Open();
documento.Add(new Paragraph(Texto));
documento.Close();
}
catch (Exception e)
{
return e.StackTrace;
}
return "Arquivo Exemplo8b.pdf gerado com sucesso!!!";
}
}
Posts Relacionados:
- Criando um documento Pdf com iTextSharp – Parte II
- Criando um documento Pdf com iTextSharp – Parte VI (Marca D´água)
- Criando um documento Pdf com iTextSharp – Parte III (Rotacionar Folha)
- Criando um documento Pdf com iTextSharp – Parte VII (Estilos)
- Criando um documento pdf com iTextSharp – Parte I
- Criando um documento Pdf com iTextSharp – Parte V (MetaDados)
- Criando um documento Pdf com iTextSharp – Parte IV (Tamanho da Página)



1 Reposta to “Criando um documento Pdf com iTextSharp – Parte VIII (Criptografia)”
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;
}
}
}