我使用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中是否存在允许重复的表单名称显示不同值的内容?
答案 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示例中稍作修改。