Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在ITextSharp中合并来自相同表单的PDF字段_C#_Pdf_Itextsharp - Fatal编程技术网

C# 在ITextSharp中合并来自相同表单的PDF字段

C# 在ITextSharp中合并来自相同表单的PDF字段,c#,pdf,itextsharp,C#,Pdf,Itextsharp,我有两个PDF表格-一个原始表格和一个新表格。新表单上有x数量的额外acro字段,但是它没有原始的PDF字段 我想将旧PDF中的字段合并到新PDF表单中。新字段将移动旧字段的一些占位符,以便它们可能重叠或不在正确的位置,但这与此无关 我尝试过的 //Get the old PDF PdfReader oldPdfReader = new PdfReader("Old.Pdf"); MemoryStream oldMs = new MemoryStream(); PdfStamper oldPdf

我有两个PDF表格-一个原始表格和一个新表格。新表单上有
x
数量的额外
acro字段
,但是它没有原始的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
,我认为这是不正确的,我需要以某种方式绘制字段

我也试过以下例子:

它从
new.PDF
中打开新字段,但不从
Old.PDF
中继承字段。关于如何合并两个PDF表单中的
AcroFields
有什么想法吗

  //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);
    }
  }