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

时间:2010-10-28 19:41:42

标签: c# pdf pdf-generation

我有一种情况需要将所有表单字段从一个PDF复制到另一个PDF。目的是在对基础Word页面进行小的编辑时自动覆盖字段。

我一直在使用Aspose.Pdf.Kit的试用版,我可以将除了单选按钮之外的所有内容复制到新表单中。但Aspose不支持复制单选按钮,这完全取消了它的实用性,更不用说他们的客户支持已经不足。

无论如何,我正在寻找某种支持复制所有类型表单字段的库或插件。

有没有人有任何想法?

谢谢,

〜DJ

2 个答案:

答案 0 :(得分:4)

是的,有可能。不,setField()不会做的伎俩...麦迪逊的代码将复制字段,但不复制字段本身。

OTOH,真的不是那么难。

类似的东西:

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#应该看起来几乎相同。

此外,此代码忽略了某人ADDS A PAGE ...这将会非常棘手的情况。它是在页面之前还是之后添加了字段?那些页面根本没有重新流动,要求你移动字段吗?那时你真的需要一个使用Acrobat Pro的手动过程。

答案 1 :(得分: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));
  }
}