Come controllare che PDF sia abilitato per Reader o non per C #?

Il mio unico requisito è trovare un pdf selezionato in una cartella abilitato o meno da Reader, in particolare se i diritti di utilizzo sono definiti in modo da consentire alle persone di aggiungere annotazioni (ad es. Commenti).

Sto facendo questo in un’applicazione Windows. Se faccio clic su un pulsante, viene triggersto un evento per cercare una cartella per i file PDF. Questo evento deve verificare se i PDF nella cartella sono abilitati per i commenti di Reader. Se lo sono, ho bisogno di rimuovere i diritti di utilizzo dei commenti o di ripristinare il PDF alla versione originale.

Il mio codice può solo trovare file PDF nella cartella. Non so come controllare se il PDF selezionato è abilitato per il commento o meno. Si prega di essere gentile e suggerire una soluzione.

Ecco il mio codice:

private void button1_Click(object sender, EventArgs e) { { string[] filePaths = Directory.GetFiles("D:\\myfolder\\pdffolder"); List files = new List(); foreach (string filePath in filePaths) { ---need to check comment enabled or not--- } } } 

    Vuoi sapere se un PDF è abilitato o meno Reader. L’abilitazione del lettore viene stabilita aggiungendo una firma digitale nota come firma dei diritti di utilizzo (UR) . Se si dispone di un’istanza di PdfReader , è ansible verificare se un PDF è abilitato per Reader utilizzando il metodo hasUsageRights() :

     PdfReader reader = new PdfReader(path_to_file); boolean isReaderEnabled = reader.hasUsageRights(); 

    I diritti di utilizzo possono comprendere molte cose diverse, come consentire alle persone di commentare, consentendo alle persone di salvare un modulo compilato, consentendo alle persone di firmare un documento, …

    Per scoprire quali diritti sono abilitati, è necessario controllare il dizionario UR o il dizionario UR3 (si noti che UR è deprecato, ma potrebbero esserci ancora file PDF con un dizionario UR ):

     PdfDictionary catalog = reader.getCatalog(); PdfDictionary perms = catalog.getAsDict(PdfName.PERMS); PdfDictionary ur = null; if (perms != null) { PdfDictionary ur = perms.getAsDict(PdfName.UR); if (ur == null) ur = perms.getAsDict(PdfName.UR3); } } 

    Se ur rimane null , non ci sono diritti di utilizzo. Se vuoi solo controllare se il commento è abilitato, dovrai controllare le voci del ur dizionario. Verrà /Annots voce /Annots con valore come matrice con valori quali Crea, Elimina, Modifica, Copia, Importa, Esporta, Online e Visualizzazione riassuntiva. Per la panoramica completa delle voci possibili, vedere Tabella 255 “Voci nel dizionario dei parametri di trasformazione UR” di ISO-32000-1.

    Puoi rimuovere tutti i diritti di utilizzo come questo:

     PdfReader reader = new PdfReader(path_to_file); if (reader.hasUsageRights()) { reader.removeUsageRights(); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(path_to_new_file)); stamper.close(); } 

    È imansible rimuovere solo i diritti di utilizzo per i commenti preservando altri diritti di utilizzo (se presenti). La semplice rimozione della voce /Annots dal dizionario /UR o /UR3 interromperà la firma digitale che abilita i diritti di utilizzo. Questa firma digitale viene creata con una chiave privata di proprietà di Adobe e nessuno strumento di terze parti (diverso da un prodotto Adobe) può utilizzare tale chiave.

    Nota finale:

    tutti gli snippet di codice sono stati scritti in Java, ma iTextSharp ha metodi o proprietà corrispondenti in C #. Non dovrebbe essere un problema portare i frammenti a C #.

    In molti casi, è sufficiente modificare una minuscola in maiuscolo:

    • Java: object.add (qualcosa);
    • C #: object.Add (qualcosa);

    O devi rimuovere il set / get:

    • Java: object.setSomething (qualcosa);
    • C #: object.Something = something;

    Grazie a tutti coloro che hanno effetto sulla mia domanda. Alla fine ho trovato la risposta in un modo simile leggendo il PDF e controllando una stringa particolare (particolare stringa presentata se Commento abilitato sul PDF).

    La stringa specifica inizia con / Annot ….., Innanzitutto leggo il PDF tramite System.IO, quindi memorizzo in una stringa e cercando la stringa particolare, Se la stringa di ricerca disponibile, il PDF è abilitato per il commento, altrimenti no.