0

我用 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 中是否有一些东西允许重复的表单名称以不同的值显示?

4

2 回答 2

0

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

于 2013-10-27T10:25:37.487 回答
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);

      }
  }
}

之后,只需将它们与 Adob​​e Acrobat DC 合并到一个文件中即可。此代码是从 PDFClown 示例中稍微修改的。

于 2016-02-19T14:21:24.310 回答