当前位置: 首页 > 知识库问答 >
问题:

是否可以使用iText以编程方式将“打开web链接操作”操作添加到acroform字段?

叶富
2023-03-14

在Adobe Acrobat中,可以将“打开Web链接操作”添加到acroform。是否可以使用iText使用现有的acroform来执行此操作?

我在iText文档中找不到关于它的任何提及,因此尝试通过编程方式创建新acrofield并将此操作添加到其中,但没有成功。这是我的代码:

PdfReader pdfReader = new PdfReader(templateStream);
        PdfStamper stamper = new PdfStamper(pdfReader, new FileOutputStream("delivery.pdf"));
        stamper.setFormFlattening(true);
        stamper.getAcroFields().setField("package", packages);
        stamper.getAcroFields().setField("purchase_id", purchaseId);
        stamper.getAcroFields().setField("activation_code", activationCode);
        if (partner != "") {
            PdfFormField field = PdfFormField.createTextField(stamper.getWriter(), false,
                    false, 100);
            field.setFieldName("partner");
            PdfAction action = new PdfAction(partner);
            field.setAction(action);
            field.setColor(new BaseColor(0,0,255));
            PdfAppearance appearance = stamper.getUnderContent(1).
                    createAppearance(200, 20);
            appearance.setFontAndSize(BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED), 12f);
            appearance.setColorFill(BaseColor.BLUE);
            field.setAppearance(PdfAnnotation.APPEARANCE_DOWN, appearance);
            field.setDefaultAppearanceString(appearance);
            stamper.getAcroFields().setField("partner", "Click here to show partner's web site");
        }

生成的PDF文档没有显示合作伙伴字段。请向我指出一些文档或错误的代码

共有1个答案

方弘
2023-03-14

您正在尝试向表单添加交互性。但是,使用这一行也会丢弃所有交互性:

stamper.setFormFlattening(true);

您还声称您正在添加一个额外的字段。据我所知,这种说法是错误的。您创建了一个字段名field(并且您以困难的方式创建它;我希望您改用TextField类)。但是,我没有看到您在任何地方添加该字段。我错过了以下行:

stamper.addAnnotation(field, 1);

请注意,这一行没有意义:

stamper.getAcroFields().setField("partner", "Click here to show partner's web site");

为什么要先创建一个字段(并可能添加一个标题),然后立即更改它?为什么不从一开始就正确创建字段?

最后,您似乎想要创建一个可以被人们单击的按钮。那么为什么要创建文本字段呢?创建一个按钮不是更有意义吗?

这是一个机器会回答的问题的例子:错误太多。。。在试图修复代码之前,也许你应该考虑阅读文档。

 类似资料:
  • /home/hduser/bin/hadoop-2.9.0/share/hadoop/common/hadoop-common-2.9.0.jar/home/hduser/bin/hadoop-common-2.9.0/share/hadoop/common/hadoop-common-2.9.0-tests.jar/home/hduser/bin/hadoop-2.9.0/share/hadoo

  • 问题内容: 我可以使用什么来调用操作系统以在用户默认使用的任何浏览器中打开URL?不担心跨操作系统的兼容性;如果它在Linux上足够对我而言! 问题答案: 以下是使用给定URL打开用户默认浏览器的方法: 这是有关此功能的文档。它是Python stdlibs的一部分: http://docs.python.org/library/webbrowser.html 我已经在Linux Ubuntu 1

  • 我的要求是,我使用jsplumb.addEndPoint为两个名为“container0”和“container1”的容器添加两个endpoint。 现在我需要通过编程方式使用连接器链接两个endpoint,但是jsplump.connect创建了一个新endpoint并进行连接,而不是使用我使用jsplump.addEndpoint创建的endpoint。 我如何连接这两个endpoint?此外

  • 我如何只用socket程序操作打印机?< br >我尝试了cups、php的IPP和windows的printer_open函数< br >,但我担心的是不要依赖于Linux、windows等平台。< br >它应该独立于平台。 下面是创建套接字到打印机的代码。 代码未优化,但已成功打印文本 唯一的问题是我无法检查打印作业状态。 编辑: 此 由于打印机处于空闲状态,除了我之外,没有人在使用,这就是

  • 我使用Firebase动态链接。当我点击Android设备上的链接时,它会询问我想用哪个应用打开:Chrome(浏览器)还是处理链接的应用。是否可以禁用使用chrome打开这些链接并立即打开应用程序? 我遵循这些指示:https://firebase.google.com/docs/dynamic-links/android/receive

  • 我可以找到tqdm进度条用于group by和其他pandas操作的示例。但找不到任何有关合并或加入的信息。 有可能在熊猫上使用tqdm进行合并吗?