O documento PDF assinado programaticamente não recebe a marca de verificação verde após ser assinado usando o Acrobat Reader

Nov 24 2020

Eu escrevi um aplicativo para assinar documentos PDF e agora posso assinar qualquer documento PDF não assinado, e o Adobe Reader mostra a marca de seleção verde. Além disso, posso assinar um arquivo com várias assinaturas e os resultados estão ok.

Mas se tento assinar o documento usando o Adobe Reader, quando o assino novamente, o resultado é que qualquer assinatura anterior à última não recebe a marca de seleção verde porque o Acrobat pensa que o documento foi alterado. Então, se eu assinar o documento novamente usando o Adobe Reader e meu aplicativo, as próximas assinaturas receberão as marcas verdes novamente. O problema aparece com a primeira assinatura do Adobe , mas não consigo entender o motivo.

Fluxo de trabalho:

  1. Assinatura 1 com Acrobat => ok
  2. Assinatura 2 com meu aplicativo => as assinaturas anteriores são inválidas, mas está tudo bem
  3. Assinatura 3 com Acrobat => assinatura 1 é inválida, mas 2 e 3 estão ok
  4. Assinatura 4 com meu aplicativo => assinatura 1 é inválida, mas 2, 3 e 4 estão ok

Você poderia me ajudar a identificar e corrigir o problema?

Agradeço antecipadamente.

Os arquivos:

  • o arquivo original
  • o arquivo assinado por mim (recebe a marca de verificação verde)
  • o arquivo assinado por acrobat (está correto).
  • o arquivo assinado por acrobat novamente (está correto)
  • o arquivo assinado por acrobat an me (falha em obter a marca de seleção verde para a parte assinada do adobe)

Respostas

2 mkl Nov 24 2020 at 23:30

Você altera a entrada de aparência padrão do dicionário AcroForm DA .

No documento assinado pela Adobe, o dicionário AcroForm tem a seguinte aparência:

<</DA(/Helv 0 Tf 0 g )/DR<</Encoding<</PDFDocEncoding 8 0 R>>/Font<</Helv 6 0 R/MyriadPro-Regular 27 0 R/ZaDb 7 0 R>>>>/Fields[26 0 R]/SigFlags 3>>

Depois de assinar esse documento, ele se torna este:

<</DA(/Helv 0 Tf 0 g)/DR<</Encoding<</PDFDocEncoding 8 0 R>>/Font<</Helv 6 0 R/MyriadPro-Regular 27 0 R/ZaDb 7 0 R>>>>/Fields[26 0 R 35 0 R]/SigFlags 3>>

Ou seja, você removeu o caractere de espaço à direita na entrada DA .