PDF Clown,具有相同字段名称的AcroForms

时间:2013-09-11 11:09:13

标签: java pdfclown

我使用Open Office制作了许多单页表单并将其导出为PDF文档。

我的应用程序我打开了许多这些pdf文档,填写表单元素并将它们组合起来保存。

我将列表打印到特定表单的每一行。麻烦的是,如果列表超出页面大小,我需要复制页面并将其余项目附加到剩余页面上。

在具有相同名称的文档上出现多个字段名称似乎存在问题,只有第一个字段具有值,后续具有相同名称的字段为空。

代码是这样的,我现在没有确切的代码。

        org.pdfclown.files.File output = new org.pdfclown.files.File();
        PageManager pageManager = new PageManager(output.getDocument());

        for(org.pdfclown.files.File pdfPage : pdfPages) {

            //fill in the form element ...
            pdfPage.getDocument().getForm().getFields().get("some_field").setValue("something");

            pageManager.add(pdfPage.getDocument());
        }

        java.io.File temp = Files.createTempFile("Test", ".pdf").toFile();
        output.save(temp, SerializationModeEnum.Standard);

我注意到当我从OpenOffice导出时,有一个复选框允许重复的表单名称。以前有人有这个问题吗? API中是否存在允许重复的表单名称显示不同值的内容?

2 个答案:

答案 0 :(得分:0)

我从未真正解决过这个问题,但我确实找到了替代方案。在每个页面上,我遍历所有表单元素,并通过添加“[x]”来更改其名称,其中“x”是页码。这使得每个页面都形成了独特的元素。

答案 1 :(得分:0)

无论我尝试什么,我都无法使用你的方法来解决我的问题。每个页面上的所有字段都以相同的名称结尾。生成的文件需要包含第一页的150份副本。我的方法不同,创建150个仅包含第一页的PDF,并在每一页上运行此代码。

public override void Run()
{
  // 1. Magic...
  string resourcePath = System.IO.Path.GetFullPath("../../../../main/res/samples/input/" + "pdf");

  // Get the list of available PDF files
  string[] filePaths = System.IO.Directory.GetFiles(resourcePath + System.IO.Path.DirectorySeparatorChar, "*.pdf");

  // Cycle through files
  for (int index = 0; index < filePaths.Length; index++)
  {
      using (File file = new File(filePaths[index]))
      {
          Document document = file.Document;

          // 2. Get the acroform!
          Form form = document.Form;
          foreach (Page page in form.Document.Pages)
          {
              foreach (var s in page.Document.Form.Fields.Values)
              {
                  s.Name = s.FullName + index.ToString();
              }

          }
          Serialize(file, file + index.ToString(), SerializationModeEnum.Incremental);

      }
  }
}

之后,只需将它们与Adobe Acrobat DC合并为一个文件即可。此代码从PDFClown示例中稍作修改。