Question

J'utilise iText pour remplir le formulaire pdf, aucune erreur dans la console, mais quand je vais ouvrir le pdf de sortie, il donne « attendu un objet dict » et après lui donne un autre message disant: « Ce document a permis des fonctionnalités étendues dans Adobe Reader . Le document a été modifié depuis sa création et l'utilisation des fonctionnalités étendues est plus disponible. "

De plus, le pdf de sortie que les modifications effectuées, mais je ne dispose pas de fonctionnalités de document PDF original, comme le montre le message ci-dessus.

J'ai utilisé ci-dessous le code ...

PdfReader reader = new PdfReader("C:\\Users\\asfs\\Downloads\\1013-Form22.pdf");
String name = "C:\\Users\\asfs\\Downloads\\Temp.pdf";

PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(name));
AcroFields form = stamp.getAcroFields();

String last = "Form22_Dtls[0].Page1[0].Country_C[0]";

form.setField(last, "Sample Country name");

HashMap map = new HashMap();
map = form.getFields();
Iterator iterator = map.keySet().iterator();
while(iterator.hasNext())
    System.out.println("Field is >>>"+iterator.next());
// close pdf stamper
stamp.setFormFlattening(true);
stamp.close();

S'il vous plaît aidez-moi.

Merci

Était-ce utile?

La solution

Essayez:

// open the pdf stamper in edit mode
stamp = new PdfStamper(reader, new FileOutputStream(name), '\0', true);

Les besoins de PdfStamper être en mode append.

Autres conseils

si vous voulez un code Java, voici un extrait que je suis d'un blog. Mais il utilise Nitro PDF, dans le cas où cela aide ou laissez-moi savoir

private ByteArrayOutputStream editPdfDocument() throws Exception {
PdfReader reader = null;
PdfStamper stamper = null;
ByteArrayOutputStream baosPDF = new ByteArrayOutputStream();
HashMap fieldsWithValues = new HashMap();
int user_id = 1234; // unique key for the object
String dirPath = “D:/abc”;// directory path
String fileName = “def.pdf”;// name of the file
try {
reader = new PdfReader(dirPath + “/” + fileName);
stamper = new PdfStamper(reader, baosPDF);
AcroFields form = stamper.getAcroFields();
HashMap fields = form.getFields();
Set keys = fields.keySet();   // keys represents the names of all the form fields
fieldsWithValues = fetchFieldValuesForObject(user_id, keys);
// fetchFieldValuesForObject(user_id, keys) method will fetch the values of the fields from Database for object identified by user_id
Iterator itr = keys.iterator();
while (itr.hasNext()) {
String fieldName = (String) itr.next();
String fieldValue = fieldsWithValues.get(fieldName) != null ? (String)(fieldsWithValues.get(fieldName)) : “”;
form.setField(fieldName, fieldValue);
}
stamper.setFormFlattening(true);
} catch (Exception dex) {
if (stamper != null)
stamper.close();
if (reader != null)
reader.close();
throw dex;
}
return baosPDF;
}`enter code here`

remplissage du formulaire PDF à l'aide de Java qui récupère directement les données de base de données, espérons que cela fonctionne

pour autant que je sache, le stamp.setFormFlattening (true); vous appelez, les champs de retirer et de remplacer que par le contenu, voilà pourquoi votre nouveau document ne conserve pas les champs

scroll top