Adobe Reader Text Drag & Drop проблема - PullRequest
1 голос
/ 19 января 2011

Я обнаружил проблемы с Adobe Reader и функцией перетаскивания для простого текста.

Когда я просто выбираю какой-то текст и помещаю его в некоторые из моих приложений .NET (или в любой текстовый редактор, такой как notepad ++ или VisualStudio), к тексту добавляются случайные символы.

Я очень старался и наблюдал за проблемой, и что касается моего наблюдения, я могу сказать следующее:

  1. Не происходит дважды, если для перетаскивания выбран один и тот же текст.
  2. Вложенный текст всегда состоит из нескольких символов (не менее десяти)
  3. Иногда кажется, что прикрепленные символы - это фрагменты текста, заштрихованные и опущенные ранее
  4. В некоторых случаях присоединенные символы не являются буквенно-цифровыми, что затрудняет распознавание
  5. Выбранный текст может быть где угодно (не только целый абзац)

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

На стороне .NET я использую стандартный интерфейс IDataObject и пробовал несколько форматов, но поведение всегда одинаковое. Это может быть воспроизведено, но это не предсказуемо, потому что это происходит случайно.

Итак, мои вопросы: Это проблема с заполнением буфера в Adobe Reader (кстати, это происходит в версии 8,9, X с отключенным безопасным режимом)? Это зависит от того, какая сторонняя программа создала PDF? Кто-то испытывал такое же поведение (поскольку я ничего не могу найти по этому поводу)?

Заранее я должен сказать, что никакой другой pdf-Reader не является опцией, потому что это бизнес-политика здесь:).

Большое спасибо заранее за того, кто мог ответить на эти вопросы.

1 Ответ

2 голосов
/ 20 января 2011

Дни и дни исследований привели меня к следующему выводу:

Это ошибка с обеих сторон (Adobe / .Net). Сначала строка, содержащаяся в перетаскиваемом из Adobe Reader объекте OleDataObject, не завершается нулем, что является очень небезопасным способом обмена данными. Неудивительно, что эта функция отключена в стандартной конфигурации Adobe Reader X (но вы можете разблокировать его). На стороне .Net каждая строка должна быть завершена для правильной работы. Итак, вы получаете указатель и создаете новый экземпляр строки, который пробегает память до тех пор, пока не найдет символ '\ 0' и не добавит неправильные символы (или символы ранее перетаскиваемого текста). Решение этой проблемы заключается в запросе размера текстовой части, содержащейся в OleDataObject. Этот размер (явно меньший или равный размеру результирующей строки) может быть использован для выполнения операции подстроки в исходной строке. Учитывая все это, в строке больше нет неправильных символов. -solved

...