2013-07-25 28 views
9

Ho un modello PDF con un modulo con le funzionalità estese abilitate. Dopo aver compilato i campi di questo modulo utilizzando iTextSharp, un utente con acrobat reader riceve il messaggio di errore:Disabilitare le funzionalità estese con iTextSharp

Questo documento abilitato esteso funzioni di Adobe Reader. Il documento ha stato modificato da quando è stato creato e l'uso di funzionalità estese non è più disponibile . Si prega di contattare l'autore per la versione originale di questo documento .

I googled un po ', ma tutti i post parlano di "abilitazione" caratteristiche estese, tuttavia, voglio i campi del modulo di rimanere disabili ed estese funzionalità spenti

Ecco un esempio di codice che sto usando:

using (var existingFileStream = new FileStream(fileNameExisting, FileMode.Open)) 
using (var newFileStream = new FileStream(fileNameNew, FileMode.Create)) 
{ 
    // Open existing PDF 
    var pdfReader = new PdfReader(existingFileStream); 

    // PdfStamper, which will create 
    var stamper = new PdfStamper(pdfReader, newFileStream); 

    var form = stamper.AcroFields; 

    var fieldKeys = form.Fields.Keys; 

    foreach (string fieldKey in fieldKeys) 
    { 
     if (fieldKey.Equals("Retailer Name")) 
      form.SetField(fieldKey, retailerName); 
    } 
    // “Flatten” the form so it wont be editable/usable anymore 
    stamper.FormFlattening = true; 

    stamper.Close(); 
    pdfReader.Close(); 
} 
+0

Forse non dovresti salvarlo, ma crea ne fai una nuova istanza con iTextSharp?Non sono state apportate modifiche, perché hai appena ricreato il documento? Non ho familiarità con le funzionalità estese PDF o iTextSharp. Che aspetto ha il tuo codice relativo all'utilizzo di iTextSharp? Attualmente sto leggendo l'API Java, ma è piuttosto grande ... –

+0

@Mike: Sto creando una nuova istanza. Ho aggiornato la domanda per mostrare il codice che sto usando. – Jags

risposta

10

I iText Keyword: Reader enabled PDFs punti per le seguenti informazioni:

0.123.

Inserito da Bruno Lowagie il Ven, 12/31/2010 - 16:37

Dopo aver compilato la mia forma, la mia PDF mostra il seguente messaggio: Questo documento abilitato esteso funzioni di Adobe Reader. Il documento è stato modificato da quando è stato creato e l'uso di funzionalità estese non è più disponibile. Si prega di contattare l'autore per la versione originale di questo documento. Come evito questo messaggio?

Il creatore del modulo ha abilitato il lettore di documenti. L'abilitazione del lettore può essere eseguita solo utilizzando il software Adobe. È possibile evitare questo messaggio in due modi:

  • Rimuovere i diritti di utilizzo. Ciò comporterà un modulo che non è più abilitato per Reader. Ad esempio: se il creatore del documento ha permesso che il modulo compilato potesse essere salvato localmente, questo non sarà più possibile dopo aver rimosso i diritti di utilizzo.
  • Compila il modulo in modalità di aggiunta. Ciò si tradurrà in una dimensione di file più grande, ma l'abilitazione di Reader verrà mantenuta.

che punti anche al campione ReaderEnabledForm.java (C#/iTextSharp equivalente dei quali è ReaderEnabledForm.cs), che mostra come fare neanche.

Nel tuo caso ciò equivale a chiamare

pdfReader.RemoveUsageRights(); 

subito dopo la creazione del PdfReader e prima di creare il PdfStamper.

/** 
* Removes any usage rights that this PDF may have. Only Adobe can grant usage rights 
* and any PDF modification with iText will invalidate them. Invalidated usage rights may 
* confuse Acrobat and it's advisabe to remove them altogether. 
*/ 
public void RemoveUsageRights() 
0

Compila il modulo in modalità di accodamento utilizzando sovraccarico PdfStamper constractor

// PdfStamper, which will create 
var stamper = new PdfStamper(pdfReader, fileStream, '\0', true); 
Problemi correlati