Adobe Reader Text Drag& Drop问题

时间:2011-01-19 13:26:34

标签: c# .net drag-and-drop adobe-reader acrobat

我发现了Adobe Reader的问题以及简单文本的拖放功能。

当我只选择一些文本并将其放入我的一些.NET应用程序(或任何texteditor,如notepad ++或VisualStudio)时,文本会附加随机字符。

我努力并观察了问题,就我的观察而言,我可以说以下内容:

  1. 选择拖动相同的文本时,它不会发生两次。
  2. 附加文字总是只有几个字符(至少十个)
  3. 有时似乎附加的字符是早期被删除和删除的文本片段
  4. 有些时候附加的字符不是字母数字字符,因此很难识别
  5. 所选文字可以是任何地方(不只是整个段落)
  6. 我将删除的文本与我的应用程序中的其他文本进行比较,这显然是失败的,因为有些字符我没有被拖动。

    在.NET方面,我使用标准的IDataObject接口并尝试了多种格式,但行为始终是相同的。它可以复制,但不可预测,因为它是随机发生的。

    所以我的问题是: 这是Adobe Reader的缓冲区填充问题(顺便说一句,它发生在版本8,9,X是否已关闭安全模式)? 这取决于哪个第三方程序创建了pdf? 是否有人经历过相同的行为(因为我对此没有任何反应)?

    事先我必须说没有其他pdf-Reader是一个选项,因为这是一个商业政策:)。

    非常感谢能够回答这个问题的人。

1 个答案:

答案 0 :(得分:2)

研究的日子和日子使我得出以下结论:

这是双方的一个错误(adobe / .Net)。首先,从Adobe Reader拖出的OleDataObject中包含的字符串不会以空终止,这是一种非常不安全的交换数据的方式。难怪这个功能在adobe reader X的标准配置中被关闭(但你可以解锁它)。在.Net端,必须终止每个字符串才能正常工作。好吧,你得到一个指针,并创建一个新的字符串实例,它贯穿内存,直到找到'\ 0'字符并添加错误的字符(或以前拖动的文本的字符)。这个混乱的解决方案是查询OleDataObject中包含的文本部分的大小。此大小(显然小于或等于结果字符串大小)可用于对原始字符串执行子字符串操作。在所有这些中,字符串不再附加错误的字符。 -solved