[英]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
,它也僅輸出新字段,我得出結論這是不正確的,我需要以某種方式繪制字段。
我還嘗試了以下示例:
它把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.