2013-07-25 4 views
9

Mam szablon PDF z formularzem z włączonymi funkcjami rozszerzonymi. Po wypełnieniu pól formularza przy użyciu tego iTextSharp użytkownik z Acrobat Reader dostaje komunikat o błędzie:Wyłącz rozszerzone funkcje za pomocą iTextSharp

Niniejszy dokument włączoną rozszerzone funkcje w programie Adobe Reader. Dokument został zmieniony od czasu jego utworzenia, a korzystanie z rozszerzonych funkcji nie jest już dostępne . Skontaktuj się z autorem, aby uzyskać oryginalną wersję tego dokumentu .

google trochę, ale wszystkie posty mówić o „umożliwiające” rozszerzone funkcje, jednak chcę pola formularza, aby pozostać niepełnosprawnych i rozszerzone funkcje wyłączony

Oto przykładowy kod, który Używam:

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

Może nie powinieneś go zapisywać, ale crea to jest nowa instancja zamiast iTextSharp?W wyniku braku zmian, ponieważ właśnie ponownie utworzyłeś dokument? Nie znam rozszerzonych funkcji PDF ani iTextSharp. Jak wygląda Twój kod związany z korzystaniem z iTextSharp? Obecnie czytam Java API, ale jest cicho ... –

+0

@Mike: Tworzę nową instancję. Zaktualizowałem pytanie, aby wyświetlić kod, którego używam. – Jags

Odpowiedz

10

The iText Keyword: Reader enabled PDFs punktów do następujących informacji:

Zgłoszony przez Bruno Lowagie on Fri, 31/12/2010 - 16:37

Po wypełnieniu formularza mój, mój PDF pojawi się następujący komunikat: Ten dokument włączoną rozszerzone funkcje w programie Adobe Reader. Dokument został zmieniony od czasu jego utworzenia, a korzystanie z rozszerzonych funkcji nie jest już dostępne. Skontaktuj się z autorem, aby uzyskać oryginalną wersję tego dokumentu. Jak mogę uniknąć tej wiadomości?

Twórca formularza umożliwił włączenie odczytu dokumentu. Włączanie czytnika można wykonać tylko za pomocą oprogramowania Adobe. Możesz uniknąć tego komunikatu na dwa sposoby:

  • Usuń prawa użytkowania. To spowoduje, że formularz nie będzie już włączony. Na przykład: jeśli twórca dokumentu zezwoli na zapisywanie wypełnionego formularza na miejscu, nie będzie to już możliwe po usunięciu praw użytkowania.
  • Wypełnij formularz w trybie dołączania. Spowoduje to zwiększenie rozmiaru pliku, ale włączenie Czytnika zostanie zachowane.

Wskazuje również do próbki ReaderEnabledForm.java (C#/iTextSharp którego odpowiednikiem jest ReaderEnabledForm.cs), która pokazuje, jak to zrobić albo.

W twoim przypadku jest to równoznaczne z wywołaniem

pdfReader.RemoveUsageRights(); 

tuż po utworzeniu PdfReader i przed utworzeniem 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

Wypełnij formularz w trybie dopisywania za pomocą przeciążenie PdfStamper constractor

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