Generare o aggiornare un PDF per includere una filigrana nascosta crittografata?


10

sfondo

Utilizzo di LaTeX per scrivere un libro. Quando un utente acquista il libro, il PDF verrà generato automaticamente.

Problema

Il PDF dovrebbe avere una filigrana che include il nome della persona e le informazioni di contatto.

Domanda

Quale software soddisfa i seguenti criteri:

  • Applica filigrane invisibili crittografate a un PDF
  • Open Source
  • Piattaforma indipendente (Linux, Windows)
  • Veloce (contrassegna un PDF di 200 pagine in meno di 1 secondo)
  • Elaborazione batch (guidata esclusivamente dalla riga di comando)
  • Resistente agli attacchi di collusione
  • Non fragile (ad es. PDF -> EPS -> PDF contiene ancora la filigrana)
  • Ben documentato (mostra esempi di utilizzo)

Idee e risorse

Alcuni pensieri e risultati:

Il problema con la PNL è che possono essere introdotti errori grammaticali. Il problema con la steganografia è che le immagini provengono da una cache di immagini, e quindi ricreare quella cache con immagini filigranate darà un ritardo durante la generazione del PDF (potrei semplicemente eliminare un'immagine dalla cache, ma non è una soluzione elegante).

Grazie!


Modifica un po 'la tua descrizione dei requisiti, altrimenti non sono chiari. "filigrane non rilevabili" chiaramente non sono quello che vuoi ... altrimenti, come li rileveresti se necessario?
Kurt Pfeifle,

Non è chiaro quale sia esattamente lo scopo del tuo sistema concepito: Rileva se il PDF viene passato a un altro utente, anche se la tua licenza lo proibisce? Rileva se il PDF è stampato su carta, anche se la tua licenza lo proibisce? Traccia la via di un particolare PDF attraverso Internet e traccia quando viene aperto? O qualcos'altro?
Kurt Pfeifle,

@pipitas: se una versione registrata del PDF viene rilasciata, senza autorizzazione, in libertà, vorrei sapere chi l'ha rilasciato. Ma se le persone possono vedere che il PDF ha una filigrana, allora la filigrana diventa molto più facile da aggirare.
Dave Jarvis, il

Risposte:


6

Ho fatto qualcosa di simile qualche anno fa. Non ha soddisfatto tutti i tuoi criteri "difficili". Funzionava così:

  • Ho messo un'area "cliccabile" difficilmente rilevabile, con dimensioni di 2x2 punti, in un punto casuale in uno dei bordi di una pagina PDF casuale. Non è molto probabile che venga scoperto per caso (tra il carico di altri hotspot cliccabili molto ovviamente nel PDF comunque ...).

  • Se si fa clic sul collegamento, verrebbe indirizzato a una pagina Web http://my.own.site/project/87245e386722ad77b4212dbec4f0e912con alcuni punti elenco "errata" inventati. (Ho già detto che 87245e386722ad77b4212dbec4f0e912era l'hash MD5 del nome della persona + dati di contatto che ho conservato in una tabella DB? :-)

Ovviamente, ciò non protegge da stampa + scansione + ocr-ing o da un ciclo di "aggiornamento" del PDF. E si basa anche su un certo grado di "sicurezza per oscurità".

Ecco come usi Ghostscript per aggiungere un tale hotspot cliccabile nell'angolo in basso a sinistra della pagina 1 di 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

Per rendere l'area selezionabile più grande e visibile, modificare sopra i parametri della riga di comando in questo modo:

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

Ancora più semplice sarebbe generare e mantenere un hash MD5 del PDF nel database. Sarà uniq per ogni PDF che crei, a causa dei documenti UUID e CreationDate e ModDate all'interno dei suoi metadati. Naturalmente, ciò consente anche di tenere traccia dei PDF originali nella loro forma digitale ...


Hai mai trovato un PDF in natura e rintracciato con questa tecnica?
Dave Jarvis,

@Dave Jarvis: Sì, in un certo senso ... Ma non era una cosa "seria", non avevo alcun interesse reale nel tracciamento. L'ho fatto solo come una prova di concetto e dopo circa 6 mesi ho spento il web server "tracking". Era per un server PDF di rete, che avevo installato all'interno dell'azienda di un cliente. Il "tracker" era simile a quello descritto sopra, ma utilizzava un'area selezionabile a pagina intera. Ho appena monitorato il numero di "hit" nel file di registro di Apache ....
Kurt Pfeifle,

Bella idea, ma nota che l'esecuzione di GhostScript su un PDF del genere potrebbe degradare qualsiasi immagine campionata in esso contenuta, poiché GhostScript non supporta il fatto di non decomprimerli (che perde informazioni da immagini che erano in stile JPEG compresse nell'input) e tende a applica la compressione in stile JPEG a tutte le immagini (anche a quelle appena decompresse) ...
SamB

@SamB: Penso che tu possa aggiungere -dJPEQ=100 -dQFActor=1.0alla linea di comando Ghostscript per assicurarti che manterrai il 100% della qualità JPEG esistente. Ma no, non ho notato alcun peggioramento della qualità dell'immagine nei miei file se ho usato l'impostazione generica di -dPDFSETTINGS=/prepressquando ri-distillando qualsiasi PDF con Ghostscript ....
Kurt Pfeifle

[cont.] E no, non è solo la compressione JPEG ad essere offerta per le immagini da Ghostscript: puoi usare -dColorImageFilter=/FlateEncode(che è ZIP senza perdita di dati) per sovrascrivere il valore predefinito =/DCTEncode(che è JPEG con perdita di dati) nelle versioni GS precedenti. Da GS v7.21 il valore predefinito è =/FlateEncodecomunque ... Come per il colore è vero per -dGrayImageFilter=...( -dMonoImageFilter=...usa /CCITTFaxEncodedi default.)
Kurt Pfeifle

1

Molto difficile e non sono sicuro che questo risponderà a tutte le tue domande.

Non sono sicuro su una soluzione tutto in uno che possa fare questo o randomizzare.

Tuttavia, se mi venisse assegnato questo compito, riterrei che il modo più semplice sia mantenere il documento in un formato intermedio come HTML formattato o simile.

Utilizzando un file CSS di stampa o simile, è possibile ottenere il layout identico al libro e utilizzare uno script di qualche tipo per randomizzare l'immagine, il contenuto o altro e un componente PDF sul lato server che assembla il documento.

quindi, ad esempio, quando qualcuno acquista il documento, lo script di acquisto può scegliere casualmente un numero che identifica un meccanismo di protezione (ad esempio prima immagine, seconda immagine, testo da qualche parte ecc.) e quindi generare un link di download univoco.

Quando viene chiamato quel collegamento per il download, controlla il numero, esegue l'operazione e lo compila in pdf, quindi lo scarica sul client.

Ancora una volta, so che non sarà facile / diretto, ma non stai chiedendo qualcosa di facile e questo è il modo migliore in cui riesco a pensare.


@Dave Jarvis - Capisco perfettamente cosa stai cercando di fare ... come ho detto, non sono sicuro della soluzione migliore, ma quello che ho detto dovrebbe almeno funzionare ... non è affatto facile.
William Hilsum,

@Dave Jarvis - Quello che stavo cercando di dire / capire è che non ho mai visto un modo tutto in uno / facile per fare quello che vuoi, ma usando PHP / ASP.Net, è più facile scrivere script / chiamare terze parti componenti. Penserei che se hai l'intero documento in HTML formattato correttamente / esattamente, sarebbe molto facile usare un componente PDF per convertire .... Ad esempio, supponiamo che ci siano 100 pagine e un'immagine a pagina 31, tu potrebbe avere le pagine 1-30 come PDF e le pagine 32-100 come PDF, la pagina 31 verrebbe generata e formattata in html (secondo lo stile del resto del libro), è quindi possibile utilizzare un 1/2
William Hilsum

componente pdf che otterrà il primo PDF, convertirà la pagina html, otterrà il secondo PDF e genererà un nuovo pdf che combina tutto questo. La pagina generata può chiamare script, eseguire steganografia (non sono sicuro sul verbo!) O qualsiasi altra cosa tu voglia ... ci sono molti componenti pdf (gratuiti e a pagamento) - questo è uno per esempio ... componentone.com/SuperProducts / PDF Spero che ciò renda un po 'più chiaro ciò che sto cercando di comunicare, ma è molto difficile da spiegare. 2/2
William Hilsum,

@Dave Jarvis - ehh, non esattamente ... Come ho già detto, molto difficile da spiegare .... Alcuni componenti PDF sono fantastici insieme agli stili CSS / di stampa. Ad esempio, guarda Moodle. È possibile formattare completamente una pagina Web e far apparire una stampa come un libro / seguire uno stile. È quindi possibile utilizzare un componente PDF per esportare / salvare ESATTAMENTE come dovrebbe essere il risultato finale. Puoi facilmente generare l'immagine di cui hai bisogno e avere il testo e assemblarlo (senza soluzione di continuità per l'utente finale) come un singolo file PDF. Ho appena citato web / php / asp.net poiché penso che sia il modo più semplice per arrivare a quello che vuoi.
William Hilsum,

@Dave Jarvis: suppongo che non stai usando pdfTeX, allora? (O eri più preoccupato per gli utenti che eseguono la conversione pdf-> ps-> pdf e degradano le immagini di esempio nel processo?). Comunque, PS> pdf conversione fa immagini tipicamente degradano, poiché GhostScript non è abbastanza intelligente per conservare le immagini JPEG stile in forma compressa, e tende ad applicare automaticamente compressione JPEG stile a qualsiasi immagine che si verificano in ingresso. (Apparentemente a Distiller può essere ordinato di lasciare da solo le immagini in stile JPEG, ma qualcuno ce l'ha davvero?)
SamB
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.