Como criar e aplicar redações?
Existe alguma maneira de implementar a edição de PDF usando o iText? Trabalhando com a API do Acrobat SDK, descobri que as redações também parecem apenas anotações com o subtipo "Redigir". Então, eu queria saber se é possível criar aqueles no iTextSharp também?
Com o Acrobat SDK, o código gostaria da seguinte maneira:
AcroPDAnnot annot = page.AddNewAnnot(-1, "Redact", rect) as AcroPDAnnot;
(Não pude aplicá-los emboraannot.Perform(avDoc)
parece não funcionar. Ideias?)
No iTextSharp, posso criar anotações de texto simples como esta
PdfAnnotation annotation = PdfAnnotation.CreateText(stamper.Writer, rect, "Title", "Content", false, null);
A única outra opção que encontrei foi criar retângulos pretos, como explicadoaqui, mas isso não remove o texto (ele ainda pode ser selecionado). Quero criar anotações de redação e, eventualmente, aplicar a redação.
// Atualização:
Como finalmente consegui criar um exemplo de trabalho, queria compartilhá-lo aqui. Ele não aplica as redações no final, mas cria redações válidas que são mostradas corretamente no Acrobat e podem ser aplicadas manualmente.
using (Stream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
PdfReader pdfReader = new PdfReader(stream);
// Create a stamper
using (PdfStamper stamper = new PdfStamper(pdfReader, new FileStream(newFileName, FileMode.OpenOrCreate)))
{
// Add the annotations
int page = 1;
iTextSharp.text.Rectangle rect = new iTextSharp.text.Rectangle(500, 50, 200, 300);
PdfAnnotation annotation = new PdfAnnotation(stamper.Writer, rect);
annotation.Put(PdfName.SUBTYPE, new PdfName("Redact"));
annotation.Title = "My Author"; // Title = author
annotation.Put(new PdfName("Subj"), new PdfName("Redact")); // Redaction "Subject". When created in Acrobat, this is always set to "Redact"
float[] fillColor = { 0, 0, 0 }; // Black
annotation.Put(new PdfName("IC"), new PdfArray(fillColor)); // Interior color
float[] fillColorRed = { 1, 0, 0 }; // Red
annotation.Put(new PdfName("OC"), new PdfArray(fillColorRed)); // Outline color
stamper.AddAnnotation(annotation, page);
}
}