iTextSharp неправильно читает поля в pdf - PullRequest
1 голос
/ 12 марта 2019

У меня проблема с iTextSharp. Давайте предположим, что у меня есть две строки полей в файле PDF (файл указан, и я не знаю, как он был создан)

Строка 1:

data[0].#subform[0].Tabella1[0].Riga2[0].DATA[0]
data[0].#subform[0].Tabella1[0].Riga2[0].ORAINIPM[0]
data[0].#subform[0].Tabella1[0].Riga2[0].ORAINILM[0]
data[0].#subform[0].Tabella1[0].Riga2[0].ORAENDLM[0]
data[0].#subform[0].Tabella1[0].Riga2[0].ORAENDAM[0]
data[0].#subform[0].Tabella1[0].Riga2[0].ORAINIPP[0]
data[0].#subform[0].Tabella1[0].Riga2[0].ORAINILP[0]
data[0].#subform[0].Tabella1[0].Riga2[0].ORAENDLP[0]
data[0].#subform[0].Tabella1[0].Riga2[0].ORAENDAP[0]

Строка 2:

data[0].#subform[0].Tabella1[0].Riga3[0].DATA[0]
data[0].#subform[0].Tabella1[0].Riga3[0].ORAINIPM[0]
data[0].#subform[0].Tabella1[0].Riga3[0].ORAINILM[0]
data[0].#subform[0].Tabella1[0].Riga3[0].ORAENDLM[0]
data[0].#subform[0].Tabella1[0].Riga3[0].ORAENDAM[0]
data[0].#subform[0].Tabella1[0].Riga3[0].ORAINIPP[0]
data[0].#subform[0].Tabella1[0].Riga3[0].ORAINILP[0]
data[0].#subform[0].Tabella1[0].Riga3[0].ORAENDLP[0]
data[0].#subform[0].Tabella1[0].Riga3[0].ORAENDAP[0]

Я читаю эти поля, используя код ниже:

            String newFile = source.Insert(source.Length - 4, "newModyfiy");
            using (FileStream outFile = new FileStream(newFile, FileMode.Create))
            {
                PdfReader pdfReader = new PdfReader(source);
                foreach (KeyValuePair<String, AcroFields.Item> kvp in pdfReader.AcroFields.Fields)
                {

                            int fileType = pdfReader.AcroFields.GetFieldType(kvp.Key);
                            string filedValue = pdfReader.AcroFields.GetField(kvp.Key);
                            string transFileName = pdfReader.AcroFields.GetTranslatedFieldName(kvp.Key);
                            textBox1.Text = textBox1.Text + fileType.ToString() + " " + filedValue + " " + transFileName + Environment.NewLine;
                }
                pdfReader.Close();
            }

Я получаю значения для обеих строк только для первой строки. Моя цель - записать значения в эти поля и сохранить новый файл. Когда я использую:

PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(newFile, FileMode.Create), '\0', true);

Я всегда перезаписываю значения первой строки (когда я пытаюсь установить значение во второй строке, она появляется в первой). Если я изменяю последний параметр PdfStamper на false, он правильно пишет файлы, но файл не редактируется вручную.

Это вопрос файла PDF? Есть ли способ прочитать, а затем записать значения в соответствующие поля?

Я потратил эти несколько дней и не смог найти причину этого странного поведения. Любая маленькая помощь или даже подсказка будут оценены.

Edit: Я добавляю упомянутый файл PDF. https://ufile.io/mwni5

Я удалил некоторый объект, но общая структура сохраняется.

...