从一个PDF复制表单字段到另一个PDF

3
我有这样一种情况,需要将一个PDF表单中的所有字段复制到另一个表单中。目的是在基础Word页面进行小修改时自动叠加字段。
我一直在使用Aspose.Pdf.Kit的试用版,能够将除了单选按钮以外的所有内容都复制到新表单中。但是Aspose不支持复制单选按钮,这完全使其无用,更不用说他们的客户支持很差了。
无论如何,我正在寻找某种支持复制所有类型表单字段的库或插件。
有人有什么想法吗?
谢谢,
~DJ

你看过 iTextSharp 吗?我不确定它是否完全符合你的需求,所以只是留言提供参考。 - Oded
我已经浏览了网站并使用iTextSharp作为关键字进行了谷歌搜索。我没有找到任何表明它可以做我需要的事情的东西,所以我想先看看社区的意见,然后再浪费更多时间。 - DJ Quimby
2个回答

4

是的,这是可能的。不,setField()不能解决问题......madisonw的代码将复制字段值,但不会复制字段本身。

然而,这并不难。

可以尝试以下代码:

PdfReader currentReader = new PdfReader( CURRENT_PDF_PATH ); // throws
PdfReader pdfFromWord = new PdfReader( TWEAKED_PDF_FROM_WORD_PATH ); // throws
PdfStamper stamper = new PdfStamper( currentReader , outputFile ); //throws
for( int i = 1; i <= tempalteReader.getNumberOfPages(); ++i) {
  stamper.replacePage( pdfFromWord, i, i );
}

stamper.close(); // throws 

我忽略了一堆异常,现在我在用Java编写代码,但C#应该看起来几乎相同。

此外,这段代码忽略了添加页面的情况……这会变得非常棘手。它是在有字段的页面之前还是之后添加的?那些页面是否重新排列过,需要你移动字段吗?此时,你确实需要使用Acrobat Pro手动处理。


马克,这正是我所需要的。在看到你的代码并阅读了代码文档后,我明白了为什么我感到困惑。Aspose采用将每个元素从一个页面复制到另一个页面的方法;这种方法替换了底层页面而不移动表单字段。非常感谢! - DJ Quimby
这个技巧还将保留文档级别的信息,如书签、脚本、“打开时如何显示”设置(查看器首选项)等等。它只是交换页面内容。 - Mark Storer

0

我同意Oded的观点,iTextSharp 应该能够完成这项任务。我曾经使用类似下面代码片段的代码,并且从未遇到过任何字段类型的问题。我相信其中肯定混杂了单选按钮。

private void CopyFields(PdfStamper targetFile, PdfReader sourceFile){
{
  foreach (DictionaryEntry de in targetFile.AcroFields.Fields)
  {
    string fieldName = de.Key.ToString();
    target.AcroFields.SetField(fieldName, sourceFile.AcroFields.GetField(fieldName));
  }
}

SetField函数仅设置字段的值,它并不实际添加新的字段对象到PDF文件中。 - DJ Quimby

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接