java - xfa.fillXfaForm 之后透明图像显示为黑框。 xfa 填充是否支持透明图像?

标签 java pdf itext watermark xfa

这是当前的问题: 我有一个由第三方创建的 XFA 表单,我想按原样使用它。 我能够通过以下方式生成带有填充字段的 PDF:

a) Extracting the XML via Acrobat Pro
b) filling the fields within the XML and calling 
            XfaForm xfa = form.getXfa();
            xfa.fillXfaForm(new FileInputStream(XML));

我想做的只是在第二页上印上图像/水印,该页有一个带有多个字段的表单。我要盖印的“草稿”png 图像具有透明背景,因此如果叠加有效,图像背景应使底层出现并且看起来像图像文本位于 pdf 页面的顶部。

如果这不是 XFA 表单,我想要完成的任务就微不足道了。我只需使用 iText 的 pdfStamper 并将此透明 PNG 印在第二页上,但由于我现在仅限于使用 Adob​​e LiveCycle Designer,我注意到非 XFA 文档中的这个曾经微不足道的任务在 XFA 中并不那么微不足道。 从上一篇文章中,我了解到我无法将技术混合在一起。我必须在 nonXFA (AcroForms) 和 XFA(由 Adob​​e LiveCycle Designer 构建)之间做出选择。基本上,我无法先进行 fillXFA,然后使用压模,所以我必须弄清楚如何使用 XFA 来完成此操作。

我已经尝试了以下步骤作为静态 PDF 和动态 PDF....PDF 的类型没有区别。

1) 在 Adob​​e LiveCycle Designer 中,我转到源 PDF 的第二页并定义了 2 个图像字段。

  overlay1 - this will span the top portion width of the page which has text 
             content underneath
  overlay2 - this will span the lower portion width of the page which has text 
             content underneath

2)作为测试...我为overlay1选择了一个具有透明背景的图像,它是 前景背景为 DRAFT 在设计时...DRAFT 透明图像有效并且正确地放置在内容之上 对于图像字段:overlay1。 我保存了修改后的基于 XFA 的 PDF,在 Acrobat Pro 中将其打开,并导出了 XFA XML 结构。 我验证了overlay1 的草稿图像是base64 编码的字符串。

<overlay1 xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/" xfa:contentType="image/png"
>iVBORw0KGgoAAAANSUhEUgAACWAAAAJYCAYAAADmY91UAAAACXBIWXMAAC4jAAAuIwF4pT92AABH
.......
.......

3) 当我采用相同的 Base 64 字符串并仅在 Overlay2 中输入其内容并通过 fillXFA 方法渲染它时...图像变成了一个黑框。 我还在 Acrobat Pro 中打开该文件,然后双击 imageField 区域,选择透明图像,但它仍然显示为黑框。 我使用不透明且矩形白色背景的图像重复了上一步 覆盖了它下面的所有东西。

4)我继续制作了另一张图像……一张没有任何透明度的图像。 草稿不透明,背景为白色。 我将其编码为 Base64 格式。 我能够将其放置在overlay1 和overlay2 图像字段中,没有任何问题。 新问题是 DRAFT 图像的白色背景覆盖了其后面的所有内容。

为什么最初的透明 png 在 Adob​​e LifeCycle Design(设计时间)期间及之后有效 fillXFA 调用它显示为黑框?但是如果我将图像更改为不使用透明度 一切...一切正常?

在 XFA 填充期间,XFA 不支持图像字段的透明图像吗?请记住,它在 设计时,我告诉 Adob​​e LiveCycle 设计师在该字段中使用此透明 png。

我基本上试图在 XFA pdf 中的特定页面上创建 2 个图像水印。

我当前的备份计划是展平 PDF(去掉 XFA)并使用 Acrobat Pro 将所有字段放回到表单上,并使用标准 PDF itext 调用和压模来填充它(这将是由于有很多字段,因此很乏味)。但我想知道在我查看选项 B 之前是否有人必须使用 XFA PDF 表单执行相同的操作。

最佳答案

所以我用 GIF 透明图像替换了相同的 PNG 透明图像。以 Base64 编码的 GIF 图像有效。我可以创建一个新的带有透明度的 GIF 文件,将其编码为 Base64,然后替换之前的文件,它仍然有效。看起来像是 XFA 表单中 PNG 渲染的错误

关于java - xfa.fillXfaForm 之后透明图像显示为黑框。 xfa 填充是否支持透明图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27827360/

相关文章:

java - 如何使用代码启用键盘导航?

java - JHipster 可执行 war 无法与 Atmosphere 结合执行

java - 如何在设备 sleep 时保持 ChromeCast session 处于 Activity 状态?

ios - 带有选项字典崩溃应用程序的 UIGraphicsBeginPDFContextToFile

javascript - Node 将 HTML 表达为 PDF

java - 蓝牙激活时如何强制警报是否?

python - 如何覆盖 Python 当前正在读取的文件

azure - 使用 Azure Key Vault + Azure Function Apps + CA 证书签署 PDF 文档时出错

java - Itext 7 分割段落

c# - iTextSharp RegionTextRenderFilter 在宽度的情况下不起作用