2012-12-11 39 views
0

我有兩個PDF表單 - 一個重要表單和一個新表單。新表格上有x額外的acro fields,但它沒有原始PDF字段。在ITextSharp中合併來自相同表單的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新的領域,我已得出結論,這是不正確,我需要借鑑一些怎樣的字段。

我也曾嘗試下面的例子:

Merging multiple PDFs using iTextSharp in c#.net

它把在新的領域從New.PDF但在從Old.PDF領域不攜帶。有關如何合併來自兩個PDF表單的AcroFields的任何想法?

回答

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); 
    } 
    } 
相關問題