Como posso bloquear um documento PDF depois de assiná-lo?

O Adobe Acrobat tem a opção de bloquear o documento PDF após assiná-lo. Isso altera as permissões do documento para que o Acrobat não ofereça a assinatura do documento novamente ou modifique anotações ou formulários. Essa parece ser uma ação razoável a ser realizada depois que um documento foi assinado para revisão por várias entidades e, finalmente, para ser liberado por alguém responsável.

O iTextSharp também pode assinar documentos e também pode adicionar outras assinaturas a um documento já assinado. O iTextSharp basicamente também pode definir as permissões do documento, mas de alguma forma eu não consigo configurar as mesmas permissões que o Acrobat X Pro. Eu defino as seguintes permissões:

PdfWriter.ALLOW_COPYPdfWriter.ALLOW_DEGRADED_PRINTINGPdfWriter.ALLOW_PRINTINGPdfWriter.ALLOW_SCREENREADERS

Eu não defino as seguintes permissões (que devem ser todas as outras):

PdfWriter.ALLOW_ASSEMBLYPdfWriter.ALLOW_FILL_INPdfWriter.ALLOW_MODIFY_ANNOTATIONSPdfWriter.ALLOW_MODIFY_CONTENTS

De qualquer forma, depois de salvar um documento como esse, vejo as seguintes permissões no Acrobat X Pro:

Impressão: Permitida (OK)Modificando documento: Não permitido (OK)Montagem: Não permitido (OK)Copiar conteúdo: permitido (OK)Leitor de tela: permitido (OK)Remover páginas: permitido (não está bem)Anotar: Permitido (NÃO OK)Preencha formulários: permitido (não OK)Sinal: Permitido (NÃO OK)Criar modelos: permitido (desconhecido)

Eu não estou usando criptografia porque isso só é possível antes de colocar a primeira assinatura. Além disso, eu realmente não quero usá-lo porque a) é basicamente inútil sem a senha do visualizador eb) o Acrobat não o faz ao bloquear um documento após a assinatura.

Meu código é baseado no projeto iSafePDF (código-fonte aberto no Codeplex) que está usando o PdfStamper de alguma forma em um documento existente.

Minha versão iTextSharp é 5.2.1. A versão mais recente tem alterações de API incompatíveis que ainda não resolvi.

Então, como posso obter o mesmo resultado do Acrobat?

(Estou ciente de que meu aplicativo ainda poderá assinar o documento porque ele não se importa com as permissões existentes. Mas pelo menos outros usuários do Acrobat devem ver as "permissões pretendidas" corretamente.)

Atualizar:

Eu investiguei o problema e parece vir daqui: As permissões só podem ser definidas através do método PdfStamper.SetEncryption, como seu quarto parâmetro. Mas chamar esse método junto com o acréscimo de uma assinatura leva à seguinte DocumentException: "O modo de acréscimo não suporta a alteração do status de criptografia". Eu não vi um método que define permissões, mas não criptografia. Esse é o problema? O iTextSharp simplesmente não suporta o que é realmente possível?

questionAnswers(1)

yourAnswerToTheQuestion