Я пытался найти альтернативу Pdfstamper в itext7, но не понял, как ее использовать? Я уже реализовал код в itexts, так как он работает, но не в itext7.
У меня еще одно сомнение, какая будет альтернатива Acro Fields в itext7?
открытый байт [] GeneratePDF (string pdfPath, Dictionary<string, string> formFieldMap, bool formFlattening = true)
{
var output = new MemoryStream();
var reader = new PdfReader(pdfPath);
var stamper = new PdfStamper(reader, output);
//PdfDocument pdfDocument = new PdfDocument(reader, writer);
var formFields = stamper.AcroFields;
foreach (var fieldName in formFieldMap.Keys)
formFields.SetField(fieldName, formFieldMap[fieldName]);
stamper.FormFlattening = formFlattening;
stamper.Close();
reader.Close();
return output.ToArray();
}
я пытался, но это не работает, показывая некоторые ошибки, такие как - не могу преобразовать форму System.IO.MemoryStream в iText.Kernel.Pdf.DocumentProperites
API iText был полностью переработан между версиями 5.x и 7.x. Таким образом, у вас не всегда есть однозначное соответствие между классами здесь и там. Таким образом, я бы предложил изучить вводные электронные книги на сайте базы знаний iText, прежде чем портировать код.
На самом деле в этих электронных книгах есть пример, очень похожий на ваш код:
//Initialize PDF document
PdfDocument pdf = new PdfDocument(new PdfReader(src), new PdfWriter(dest));
PdfAcroForm form = PdfAcroForm.GetAcroForm(pdf, true);
IDictionary<String, PdfFormField> fields = form.GetFormFields();
PdfFormField toSet;
fields.TryGetValue("name", out toSet);
toSet.SetValue("James Bond");
fields.TryGetValue("language", out toSet);
toSet.SetValue("English");
fields.TryGetValue("experience1", out toSet);
toSet.SetValue("Off");
fields.TryGetValue("experience2", out toSet);
toSet.SetValue("Yes");
fields.TryGetValue("experience3", out toSet);
toSet.SetValue("Yes");
fields.TryGetValue("shift", out toSet);
toSet.SetValue("Any");
fields.TryGetValue("info", out toSet);
toSet.SetValue("I was 38 years old when I became an MI6 agent.");
form.FlattenFields();
pdf.Close();
(«Сведение формы» в «Главе 4: Создание интерактивного PDF | .NET» в «iText 7: Вводный курс для .NET»)
Вы спрашиваете об «альтернативе для Pdfstamper в itext7», но она уже есть в вашем коде,
PdfDocument pdfDocument = new PdfDocument(reader, writer)
.