Pregunta

Estoy usando ITEXT para completar el formulario PDF, no hay error en la consola, pero cuando abro la salida PDF está dando "esperado un objeto DICT" y después de que da otro mensaje que dice "Este documento habilitó funciones extendidas en Adobe Reader. El documento se ha cambiado desde que se creó y el uso de características extendidas ya no está disponible ".

Además, el PDF de salida tiene los cambios que hice, pero no tiene características del documento PDF original, como lo muestra el mensaje anterior.

He usado a continuación el código ...

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();

Por favor, ayúdame.

Gracias

¿Fue útil?

Solución

Probar:

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

El PDFStamper debe estar en modo de agregado.

Otros consejos

Si quieres un código Java, aquí hay un fragmento que obtuve de uno de un blog. Pero usa pdf nitro, en caso de que esto me ayude o me haga saber

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`

Es el llenado del formulario PDF usando Java que recupera directamente los datos de la base de datos, espero que funcioneVisite los códigos Java para el formulario automático relleno

Hasta donde yo sé, el sello.setFormflatteing (verdadero); Está llamando, elimina los campos y reemplaza eso con contenido, por eso su nuevo documento no preserva los campos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top