iText 7: establece la imagen en el botón que aparece varias veces

Tengo un PDF simple con un campo de botón que me gustaría llenar con una imagen.

El campo del botón aparece varias veces en el documento. Me gustaría configurar la imagen una vez al nivel del campo, para que la imagen aparezca para cada aparición del campo.

El PDF que uso para las pruebas.

El código que falla:

ByteArrayOutputStream outStr = new ByteArrayOutputStream();

PdfDocument pdfDocument = new PdfDocument(new PdfReader(pdfStr), new PdfWriter(outStr));
PdfAcroForm acroForm = PdfAcroForm.getAcroForm(pdfDocument, false);

PdfButtonFormField button = (PdfButtonFormField) acroForm.getField("image");
button.setImage("src/test/resources/my_image.png");

acroForm.flattenFields();

pdfDocument.close();

La excepción que se lanza:

com.example.documents.DocumentServiceException: Fail to render form
    at com.example.ITEXTTests.test(ITEXTTests.java:100)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: java.lang.IllegalArgumentException
    at com.itextpdf.layout.element.Text.<init>(Text.java:69)
    at com.itextpdf.layout.element.Paragraph.<init>(Paragraph.java:80)
    at com.itextpdf.forms.fields.PdfFormField.drawButton(PdfFormField.java:3226)
    at com.itextpdf.forms.fields.PdfFormField.drawPushButtonAppearance(PdfFormField.java:3199)
    at com.itextpdf.forms.fields.PdfFormField.regenerateField(PdfFormField.java:2106)
    at com.itextpdf.forms.PdfAcroForm.flattenFields(PdfAcroForm.java:661)
    at com.example.ITEXTTests.test(ITEXTTests.java:98)
    ... 23 more

Estoy usando iText 7.1.4 (última versión 7.x).

Respuesta 1

¿Cómo podemos escribir la consulta en mongodb que es igual a la consulta sql select interna? seleccione field1, field2 de workflowTable donde id en (select idField from usersTable) No de hits a la base de datos debe ser ...

De acuerdo con una respuesta hecha para convertir Spark DataFrame a Pojo Object, he aprendido que un Dataframe es un alias de Dataset <Row>. Actualmente calculé un JavaPairRDD <CityCode, CityStatistics> ...

Estoy usando la API predeterminada java.util.Logging para imprimir información en mi registro. Logger.getLogger (Datastore.class.getName ()); logger.info ("Registro"); donde Datastore es el nombre de la clase, pero yo ...

He creado tres hilos en un programa de Java. Uno es el programa principal, los otros son dos clases que extienden Thread. El hilo principal representa un controlador para una máquina. Otro hilo es el ...