我有一个使用LiveCycle Designer构建的pdf,我可以使用iText 5.4.3轻松更新所有TextField。我的问题是如何更新现有的ImageField并访问Table对象?
我已经获得了图像字段的位置,并且能够将图像添加到表单上,然后删除图像字段。
Rectangle rect = acroFields.getFieldPositions("TopmostSubform[0].Page5[0].processFlowImage[0]")
.get(0).position;
String realPath = FacesContext.getCurrentInstance()
.getExternalContext().getRealPath("/");
Image img = Image.getInstance(realPath + wsSelected.getImage());
// use scalePercent as images are process flow diagrams and image
// ratios are not consistent and making them absolute causes distortion
img.scalePercent((float) 47.0);
img.setAbsolutePosition(rect.getLeft(), rect.getBottom());
stamper.getOverContent(5).addImage(img);
虽然这有效,但我认为能够或者应该是获取图像字段并使用InputStream或文件填充的能力。
另一个问题是在表单上使用预定义表时。我可以获取字段名称并更新相应的单元格。
但是,我无法找到任何获取表格的示例,作为表格对象,并添加新行。我可以获取位置,创建一个新的PdfPTable并将其标记在带有数据的表单上。这不行。该表将具有基于db数据的动态行数。它是一个可流动的布局,位于预定义的文本和标题之间。表单(模板)是预先构建的并作为模板提供。表单中填充了DB值和来自JSF应用程序的一些用户输入,并作为完成的接口协议呈现给用户。
我的想法是,如果我无法访问表对象及其属性(行,列,单元格),我需要逐行读取表单,创建并插入动态表格到输出流的时间和位置,然后继续阅读表格并将最终结果标记为新表格。