2014-11-21 4 views
-1

Я использую iTextSharp 5.5.3 У меня есть PDF с именованными полями, которые я создал с помощью жизненного цикла Adobe. Я могу заполнить поля с помощью iTextSharp, но когда я изменяю текст для поля, это не изменяется , Я действительно не знаю, почему это так. Вот мой код нижеНастройка цвета текста AcroField в itextSharp

 form.SetField("name", "Michael Okpara"); 
     form.SetField("session", "2014/2015"); 
     form.SetField("term", "1st Term"); 

     form.SetFieldProperty("name", "textcolor", BaseColor.RED, null); 
     form.RegenerateField("name"); 

ответ

2

Если форма создается с помощью Adobe LifeCycle, то есть два варианта:

  • Вы иметь чистую форму РФА. XFA означает архитектуру XML Forms, а ваш PDF - не что иное, как контейнер XML-потока. В документе практически нет синтаксиса PDF, и нет полей AcroForm. Я не думаю, что это так, потому что вы все еще можете заполнить поля (которые не будут работать, если у вас есть чистая форма XFA).
  • У вас есть гибридная форма. В этом случае форма дважды описывается внутри файла PDF: один раз с использованием XML-потока (XFA) и один раз с использованием синтаксиса PDF (AcroForm). iText заполнит поля в обоих описаниях, но описание XFA становится предпочтительным при рендеринге документа. Изменение цвета поля (или других свойств) потребует изменения XML, а iText (Sharp) не сможет этого сделать.

Если я могу сделать обоснованное предположение, я бы сказал, что у вас есть гибридная форма, и что вы меняете только цвет текста поля AcroForm, не меняя цвет текста в поле XFA (что очень сложно достигать).

Пожалуйста, попробуйте добавить следующую строку:

form.RemoveXfa(); 

Это удалит поток РФА, в результате чего в форме, которая только держит описание AcroForm.

Я написал небольшой пример с именем RemoveXFA, используя форму, которую вы поделили, чтобы продемонстрировать это. Это C#/iTextSharp версия этого примера:

public void ManipulatePdf(String src, String dest) 
{ 
    PdfReader reader = new PdfReader(src); 
    PdfStamper stamper = new PdfStamper(reader, new FileStream(dest, FileMode.Create)); 
    AcroFields form = stamper.AcroFields; 
    form.RemoveXfa(); 
    IDictionary<String, AcroFields.Item> fields = form.Fields; 
    foreach (String name in fields.Keys) 
    { 
     if (name.IndexOf("Total") > 0) 
      form.SetFieldProperty(name, "textcolor", BaseColor.RED, null); 
     form.SetField(name, "X"); 
    } 
    stamper.Close(); 
    reader.Close(); 
} 

В этом примере я удалить поток РФА и я смотрю на всех остальных AcroFields. Я изменяю цвет текста всех полей со словом «Всего» в их имени и заполняю каждое поле «Х».

Результат выглядит следующим образом: reportcard.pdf

enter image description here

Все поля показывают букву «X», но поля в общем столбце написаны красным цветом.

+0

Спасибо за ваш ответ. Я добавил form.RemoveXfa() и все поля, которые были ранее заполнены, стали пустыми. Теперь я вернулся к жизненному циклу adobe, сделал еще одну копию и сохранил ее как «форму Adobe Dynamic XML» в отличие от «Adobe Static PDF Form», которую я использовал ранее, когда моя программа выполнялась без ошибок, но когда я пытаюсь открыть полученный результат документ я получаю это «Пожалуйста, подождите ...Если это сообщение не будет в конечном итоге заменено надлежащим содержимым документа, средство просмотра PDF может не отображать этот тип документа .... «У меня есть последний Adobe XI –

+0

Если вы создадите форму как« Adobe Dynamic XML form ', то ваша форма не содержит полей AcroForm, поэтому вы не можете изменить цвет текста. Вам действительно нужна «Adobe Static PDF Form», но меня беспокоит, что поля не заполнены. Можете ли вы поделиться PDF? document? –

+0

Хорошо, я действительно не знаю, как поделиться файлом здесь, похоже, не может найти ссылку, на которую вы можете направить меня? –

0

Я, наконец, нашел способ, догадался, что проблема исходила из использования Adobe LC, поэтому я переключился на Open Office, все это сработало, но когда я сглаживаю форму, все исчезает. Я нашел решение, что здесь ITextSharp PDFTemplate FormFlattening removes filled data

Спасибо Mr Lowagie за помощь

Смежные вопросы