Gerar ou atualizar um PDF para incluir uma marca d'água oculta e criptografada?

Gerar ou atualizar um PDF para incluir uma marca d'água oculta e criptografada?

Fundo

Usando LaTeX para escrever um livro. Quando um usuário adquirir o livro, o PDF será gerado automaticamente.

Problema

O PDF deve ter uma marca d'água que inclua o nome da pessoa e informações de contato.

Pergunta

Qual software atende aos seguintes critérios:

  • Aplica marcas d'água criptografadas e invisíveis a um PDF
  • Código aberto
  • Independente de plataforma (Linux, Windows)
  • Rápido (marca um PDF de 200 páginas em menos de 1 segundo)
  • Processamento em lote (exclusivamente orientado por linha de comando)
  • Resistente a ataques de conluio
  • Não frágil (por exemplo, PDF -> EPS -> PDF ainda contém a marca d'água)
  • Bem documentado (mostra exemplos de uso)

Ideias e recursos

Algumas reflexões e descobertas:

O problema com a PNL é que podem ser introduzidos erros gramaticais. O problema com a esteganografia é que as imagens são provenientes de um cache de imagens e, portanto, recriar esse cache com imagens com marca d'água causará um atraso na geração do PDF (eu poderia excluir apenas uma imagem do cache, mas essa não é uma solução elegante).

Obrigado!

Responder1

Eu fiz algo semelhante há alguns anos. Não atendeu a todos os seus critérios "rígidos". Funcionou assim:

  • Coloquei uma área "clicável" de tamanho 2x2, dificilmente detectável, em algum lugar aleatório em uma das bordas de uma página PDF aleatória. Não é muito provável que ele seja descoberto por acidente (entre a carga de outros pontos de acesso obviamente clicáveis ​​que estavam no PDF de qualquer maneira...).

  • Se você clicar no link, será direcionado para uma página da Web http://my.own.site/project/87245e386722ad77b4212dbec4f0e912, com alguns marcadores de "errata" inventados. (Já mencionei que 87245e386722ad77b4212dbec4f0e912era o hash MD5 do nome da pessoa + dados de contato que mantive armazenado em uma tabela de banco de dados? :-)

Obviamente, isso não protege contra impressão+digitalização+ocr-ing ou contra um ciclo de "refritura" de PDF. E também depende de algum grau de “segurança pela obscuridade”.

Veja como você usa o Ghostscript para adicionar um ponto de acesso clicável ao canto inferior esquerdo da página 1 do random-in.pdf:

gs \
 -o random-out.pdf \
 -sDEVICE=pdfwrite \
 -dPDFSETTINGS=/prepress \
 -c "[ /Rect [1 1 3 3]" \
 -c "  /Color [1 1 1]" \
 -c "  /Page 1" \
 -c "  /Action <</Subtype /URI" \
 -c "  /URI (http://my.own.site/87245e386722ad77b4212dbec4f0e912)>>" \
 -c "  /Subtype /Link" \
 -c "  /ANN pdfmark" \
 -f random-in.pdf

Para tornar a área clicável maior e visível, altere os parâmetros da linha de comando como este:

 [....]
 -c "[/Rect [1 1 50 50]" \
 -c "  /Color [1 0 0]" \
 [....]

Ainda mais simples seria gerar e manter um hash MD5 do PDF em seu banco de dados. Será único para cada PDF que você criar, por causa dos documentos UUID e CreationDate e ModDate dentro de seus metadados. Claro, isso também só permite rastrear os PDFs originais em seu formato digital...

Responder2

Muito difícil e não tenho certeza se isso responderá a todas as suas perguntas.

Não tenho certeza de uma solução completa que possa fazer isso ou randomizar.

No entanto, se eu fosse encarregado disso, pensaria que a maneira mais fácil seria manter o documento em um formato intermediário, como HTML formatado ou similar.

Usando um arquivo CSS de impressão ou similar, você pode fazer com que o layout seja idêntico ao do livro e usar algum tipo de script para randomizar a imagem, o conteúdo ou qualquer coisa e um componente PDF do lado do servidor que monta o documento de volta.

então - por exemplo, quando alguém compra o documento, seu script de compra pode escolher aleatoriamente um número que identifica um mecanismo de proteção (por exemplo, primeira imagem, segunda imagem, texto em algum lugar etc.) e então gerar um link de download exclusivo.

Quando esse link de download é chamado, ele verifica o número, realiza a operação e compila em pdf e depois baixa para o cliente.

Mais uma vez, sei que isso não será fácil/direto, mas você não está pedindo algo que seja fácil e esta é a melhor maneira que consigo pensar.

informação relacionada