0

元のフォームと新しいフォームの 2 つの 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のフィールドは引き継がれませんOld.PDFAcroFields2 つの 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 に答える