Проект состоит в том, чтобы заполнить существующие формы программным способом из базы данных / таблицы данных и позволить пользователю впоследствии редактировать формы, поскольку база данных не содержит все необходимые значения.
Я могу получить значения и поместить их в форму, однако:
- Значения, установленные с помощью AcroForms, не отображаются / печатаются при просмотре формы.
- Изменение цвета фона не отображается при просмотре формы.
Оба изменения появляются при нажатии на поле.
Я понимаю, что это вызвано гибридными проблемами XFA и AcroForms, и что pdfXFA является платным расширением для библиотеки itext.PdfXFA работает только для выравнивания XFA, и мне не нужно этого делать, поскольку мне нужно, чтобы поля оставались редактируемыми.Я уже пробовал решения, предложенные следующим образом:
- Why-Dont-the-itext-7-form-field-values-print
- это потрясающая запись значений XFA
- Это руководство включает в себя .RemoveXfaForm ()
Другие решения - все ссылки .RemoveXfaForm (), которые должны удалитьвсе форматирование XFA, но не работает должным образом.При использовании GetXFA обнаружил, что он остался даже после вызова .RemoveXfaForm ().
Я попытался переместить form.SetNeedAppearances (true) и form.RemoveXfaForm () до значений, заданных до, и после значений, заданных непосредственно перед событием pdf.close ().Я чувствую, что я просто упускаю что-то идиотически простое здесь и мог бы использовать некоторую помощь:
public virtual void ManipulatePdf(string src, string dst, DataGridViewRow dataRow)
{
//Initialize PDF document
PdfDocument pdf = new PdfDocument(new PdfReader(src), new PdfWriter(dst));
PdfAcroForm form = PdfAcroForm.GetAcroForm(pdf, true);
//form.RemoveXfaForm();
//form.SetNeedAppearances(true);
IDictionary<String, PdfFormField> fields = form.GetFormFields();
PdfFormField toSet;
//visits each field, fills dependant on whether dgv column exists
foreach (string field in fields.Keys){
switch (dataGridView1.Columns.Contains(field))
{
case false:
if (field == "Date")
{
fields.TryGetValue(field, out toSet);
//this value is visible
toSet.SetValue(dateTime.ToString("D"));
}
else
{
fields.TryGetValue(field, out toSet);
//this setting does not commit, issue with hybrid XFA/AcroForm
toSet.SetValue("0").SetBackgroundColor(ColorConstants.YELLOW);
}
break;
case true:
if (dataRow.Cells[field].Value != null && !DBNull.Value.Equals(dataRow.Cells[field].Value))
{
string value = dataRow.Cells[field].Value.ToString();
fields.TryGetValue(field, out toSet);
//this value is sometimes visable on finished form
toSet.SetValue(value);
}
break;
default:
break;
}
}
//form.RemoveXfaForm();
pdf.Close();
}
Я попробовал закомментированные рекомендации в нескольких комбинациях, и на данный момент действительно просто нужно выяснить, могу ли я получитьэто сработает или начните искать другое решение (я уже отправил письмо по электронной почте, ответа нет), так что спасибо за любые идеи!