0

我有两个 PDF 表格 - 一个原始表格和一个新表格。新表单上有x大量额外acro fields内容,但没有原始 PDF 字段。

我想将旧 PDF 中的字段合并到新的 PDF 表单中。新字段/字段会移动旧字段的一些占位符,因此它们可能会重叠或不在正确的位置,但这无关紧要。

我试过的

//Get the old PDF
PdfReader oldPdfReader = new PdfReader("Old.Pdf");
MemoryStream oldMs = new MemoryStream();
PdfStamper oldPdfStamper = new PdfStamper(oldPdfReader, oldMs);
//Get the new PDF
PdfReader newPdfReader = new PdfReader("New.Pdf");
MemoryStream newMs = new MemoryStream();
PdfStamper newPdfStamper = new PdfStamper(newPdfReader, newMs);

foreach(var oldField in oldPdfStamper.AcroFields.Fields)
{
   //Do a check to see if the field isn't already added
   if(!newPdfStamper.AcroFields.Fields.Any(x => x.Key == oldField.Key))
      newPdfStamper.AcroFields.Fields.Add(oldField);
}

即使调试命中,这也只会输出新字段add,我已经得出结论这是不正确的,我需要以某种方式绘制字段。

我还尝试了以下示例:

在 c#.net 中使用 iTextSharp 合并多个 PDF

它将新字段放在 from 上,New.PDF但不会继承 from 的字段Old.PDF。关于如何合并AcroFields来自两个 PDF 表单的任何想法?

4

1 回答 1

0
  //Get the old PDF
  PdfReader oldPdfReader = new PdfReader(@"old.pdf");
  MemoryStream oldMs = new MemoryStream();
  PdfStamper oldPdfStamper = new PdfStamper(oldPdfReader, oldMs);
  //Get the new PDF
  PdfReader newPdfReader = new PdfReader(@"new.pdf");
  MemoryStream newMs = new MemoryStream();
  PdfStamper newPdfStamper = new PdfStamper(newPdfReader, newMs);
  AcroFields af = oldPdfStamper.AcroFields;

  foreach (var oldField in oldPdfStamper.AcroFields.Fields)
  {
    var rectangles = af.GetFieldPositions(oldField.Key).Select(x => x.position.GetRectangle(x.position.Top, x.position.Bottom));
    foreach (var rectangle in rectangles)
    {
      TextField tf = new TextField(newPdfStamper.Writer, rectangle, oldField.Key);
      newPdfStamper.AddAnnotation(tf.GetTextField(), af.GetFieldPositions(oldField.Key).First().page);
    }
  }
于 2012-12-11T16:01:00.663 回答