PdfContentByte не будет перезаписывать флажок

#c# #itextsharp

#c# #itextsharp

Вопрос:

Я добавляю содержимое в существующий PDF-файл, используя PdfContentByte. Существующий PDF-документ, который изначально был создан в Word, имеет несколько флажков. Мне нужно наложить «X» на флажок, когда это необходимо. Что я могу сделать, чтобы заставить ‘X’ наложить флажок. В приведенном ниже коде «X» помещается под флажок.

   private static void AddField(float xpos, float ypos, string Text, PdfImportedPage page, PdfContentByte cb2, BaseFont f_cn2)
{
  cb2.AddTemplate(page, 0, 0);
  cb2.BeginText();
  cb2.SetFontAndSize(f_cn2, 10);
  cb2.ShowTextAligned(Element.ALIGN_LEFT, Text, xpos, ypos, 0F);
  //cb2.SetTextMatrix(xpos, ypos);  //(xPos, yPos)
  //cb2.ShowText(Text);
  cb2.EndText();
}
 

Комментарии:

1. в вашем названии вы имеете в виду переопределение или перезапись ?

Ответ №1:

Если ваш флажок является полем формы, то он визуализируется с помощью аннотации виджета. Аннотация виджета — это особая форма аннотации. Аннотации — это интерактивные функции, которые не являются частью потока содержимого страницы. Они перечислены в /Annots массиве словаря страниц и всегда добавляются поверх содержимого страницы.

В вашем фрагменте кода я вижу метод с вводящим в заблуждение именем AddField() . Это имя вводит в заблуждение, потому что вы не добавляете поле. Похоже, вы добавляете содержимое в поток содержимого. Если этот поток содержимого является частью потока содержимого страницы, то следует ожидать и нормально, что это содержимое покрывается аннотацией виджета.

Мне кажется, что вы хотите «установить» флажок. Почему бы вам не сделать это, заполнив форму? Предположим, что имя поля флажка равно «cb», а значение on равно «Yes», тогда вы бы использовали PdfStamper экземпляр, создали AcroFields объект (например form ), а затем сделали что-то вроде этого:

 form.setField("cb", "Yes");
 

Это должно «проверить» поле интерактивного флажка. Смотрите Пример FillDataSheet для полного примера.


Важно: вам нужно знать имя поля (оно не всегда будет «cb»), и вам нужно знать состояния внешнего вида флажка (оно не всегда будет «Да»). Вам следует прочитать главу 6 моей книги для получения дополнительной информации.