2016-04-05 3 views
0

Мне удалось выделить текст в pdf, но мне было интересно, как я могу удалить добавленную мной аннотацию. Я добавляю со следующим кодом:Удалить Annotation iTextSharp

PdfAnnotation highlight = PdfAnnotation.CreateMarkup(stamper.Writer, rectangle, null, PdfAnnotation.MARKUP_HIGHLIGHT, quadPoints.ToArray()); 
    highlight.Color = BaseColor.RED; 
    stamper.AddAnnotation(highlight, page); 

Если бы я сохранить ссылку самого PdfAnnotation как в списке, я мог просто вернуться к нему и использовать, чтобы удалить его?

Типичный сценарий был бы, если бы я должен был выделить что-то, а затем выполнить чек позже и понять, что его больше не нужно выделять, могу ли я вернуться и отменить его. Я подумывал о том, чтобы составить список всего, что я должен выделить, а затем, как только я уверен, что все в этом списке нужно выделить, идти вперед и делать это, но этот способ, кажется, в два раза медленнее, как если бы я просто вернулся и отключил подсветка, как только я узнал. Итак, если я хотя бы сохранил список PdfAnnotation, могу ли я вернуться к последнему в списке и сделать что-то вроде highlight.Remove();, если у меня уже есть ссылка на него. Или мне нужно будет пометить аннотацию, а затем перебрать страницу для всего PdfDictionary и найти тот же тег.

+0

Вы говорите об «добавлении и удалении его за один проход» или «добавлении его сегодня и его удалении завтра»? Я смущен, потому что вы говорите о сохранении ссылки на объект, который звучит как первый. –

+0

Привет, Крис, – peacefullearner

+1

Вообще говоря, при вызове методов 'AddXXX' для большинства вещей (кроме' PdfDictionary' и других базовых коллекций) предполагается, что это односторонний путь, который записывается в PDF и по существу делается с. Единственный способ «отменить» эти операции - закрыть PDF-файл и выполнить второй проход. _might_ быть слушателем или событием, которое вы могли бы реализовать, чтобы вы могли выполнить post-process до но, честно говоря, было бы намного проще, просто сохранить собственную коллекцию «Аннотации» и страниц, добавить/удалить по мере необходимости, а затем добавить в «Stampe» r' в конце, когда вы закончите. –

ответ

0

PdfAnnotation extends PdfDictionary, что означает, что вы можете добавить пользовательскую запись в этот словарь. См. Мой ответ на вопрос: Insert PieceInfo in merged document with ITextSharp

В этом ответе я добавляю дополнительную запись в словарь для страниц: ITXT_PageMarker. Обратите внимание, что я использовал имя второго класса , начиная с префикса, который был зарегистрирован в ISO с помощью iText, чтобы избежать столкновений с существующими или будущими ключами в словаре страниц.

Добавив этот дополнительный ключ (в моем случае в словарь страниц, в вашем случае в словарь аннотаций), вы можете искать этот элемент (в моем случае страницу, в вашем случае аннотацию) впоследствии, в готовый PDF.

Предостережение: Это не ответит на ваш вопрос, если вы хотите добавить аннотацию, а затем удалить ее за один проход. Как упоминает Крис Хаас в своем комментарии, ваш вопрос несколько запутан.

+0

Привет, Бруно, я обновил вопрос. пожалуйста, дайте мне знать, если это все еще запутывает. – peacefullearner