好吧,花了很长时间玩这个,我想我可能在发布问题后很快就找到了解决方案。有点尴尬,但嘿,现在似乎工作。
我不想删除这个问题,以防有人想要详细信息。基本上,我再次尝试了点(c)但是在我放回的XML中我使用了嵌入式图像。所以,似乎我可以使用iText更改XFA模板母版页。更多测试要遵循......
=========================
问题:将水印应用于PDF XFA(动态与否)。最后,PDF应该仍然是XFA,并且应该保持其所有安全设置不变。我无法控制进入的PDF格式。
问题:我可以使用iText 5来做到这一点吗?如果是,是通过 PdfStamper.getUnderContent()还是通过XfaForm.setXfa()或其他?前两个对我来说还没有用。
我想知道这是否是我遗漏的一些XFA细节(即当我尝试替换XML时),不确定如何实际保护XFA免受更改。我是否需要生成一些UUID,加密一些东西,一些关于签名......
顺便说一句,如果我在更换XML后使用iText生成的PDF,那么打开并保存在LC中,水印显示
感谢, 克里斯蒂安
========================
无论如何,这是我的问题的简短版本。如果您认为您可以提供帮助和/或对更多细节感兴趣......
我知道这个或类似的问题出现过,但到目前为止我所尝试的并不适合我。我也承认我不是IText,XFA或PDF标准专家。我浏览了一些论坛帖子,Itext书,浏览了规格,没有运气。
PDF输入没有常规使用权,没有安全性。在Acrobat中打开时,它将显示更改文档/文档组装/添加模板的限制,但我感觉所有XFA都有。以下内容没有回来......
System.out.println(" permissions " + reader.getPermissions());
System.out.println(" usage rights " + reader.hasUsageRights());
System.out.println(" viewer pref" + reader.getSimpleViewerPreferences());
以下是我经历过的一些事情:
a)在其中执行LC (https://forums.adobe.com/thread/496558)
这很有效。如果我尝试在母版页上放置图像,则从LC保存时,它会在所有页面上显示为水印。
b)尝试使用iText写作(https://sourceforge.net/p/itext/mailman/message/17225398/)
我发现了一条来自'07建议使用 pdfStamper.getUnderContent()的帖子。如果最终确实为那个要求
的人工作,那么这个主题似乎没有结束对我来说,代码适用于简单的PDF,但不适用于XFA
PdfContentByte under = pdfStamper.getUnderContent(1);
under.beginText();
BaseFont FONT = BaseFont.createFont("c:/windows/fonts/times.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED);
under.setFontAndSize(FONT, 40);
under.showTextAligned(Element.ALIGN_CENTER, "TEST_TEXT", 200, 600, 45);
under.endText();
c)生成XML并使用iText(Some pdf file watermark does not show using iText)
替换它阅读上面的帖子和第8.6节的行动后,看来这是正确的路径,所以:
相关代码:
XfaForm xfa = new XfaForm(reader);
DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();
fact.setNamespaceAware(true);
DocumentBuilder db = fact.newDocumentBuilder();
Document doc = db.parse(new FileInputStream(xml));
xfa.setDomDocument(doc);
xfa.setChanged(true);
XfaForm.setXfa(xfa, stamper.getReader(), stamper.getWriter());
我尝试过使用客户提供的示例PDF以及在LiveCycle Designer中创建的简单XFA表单,但没有运气。如果我在LiveCycle中打开xfa3_itext它会执行水印,如果我再次从LiveCycle将其保存为动态XFA PDF,则新PDF将显示水印。
p,这是一篇很长的帖子......抱歉。感谢阅读和任何反馈