1

我发现 Adob​​e Reader 和简单文本的拖放功能存在问题。

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

我很努力地观察了这个问题,就我的观察而言,我可以说以下几点:

  1. 它不会发生两次选择相同的文本进行拖动。
  2. 附加的文本总是只有几个字符长(至少十个)
  3. 有时看起来附加的字符是较早被删除和删除的文本片段
  4. 有时附加的字符不是字母数字字符,因此难以识别
  5. 选定的文本可以在任何地方(不仅仅是整个段落)

我将删除的文本与我的应用程序中的其他文本进行比较,这显然失败了,因为有些字符我没有拖动。

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

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

提前我必须说没有其他 pdf-Reader 是一个选项,因为它是这里的商业政策:)。

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

4

1 回答 1

2

日复一日的研究使我得出以下结论:

这是双方的错误(adobe/.Net)。起初,从 Adob​​e Reader 拖出的 OleDataObject 中包含的字符串不是空终止的,这是一种非常不安全的数据交换方式。难怪adobe reader X的标准配置中关闭了这个功能(不过可以解锁)。在.Net 端,必须终止每个字符串才能正常工作。好吧,您会得到一个指针,并创建一个新的字符串实例,该实例在内存中运行,直到找到“\ 0”字符并添加错误的字符(或先前拖动的文本的字符)。解决这个问题的方法是查询 OleDataObject 中包含的文本部分的大小。这个大小(显然小于或等于结果字符串大小)可用于对原始字符串进行子字符串操作。有了这一切,字符串就没有附加的错误字符了。-解决了

于 2011-01-20T16:05:51.437 回答