簡體   English   中英

合並ITextSharp中相同形式的PDF字段

[英]Merging PDF fields from identical forms in ITextSharp

我有兩種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

它把New.PDF上的新字段放在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);
    }
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM