cocoa - PDFDocument 可能存在的编码问题
问题描述
我在 Mac 应用程序(Xcode 11.7、10.15 部署目标)中使用 PDFKit 来查看 pdf。用户可以突出显示选择并复制文本或创建引号。
对于某些 pdf,我无法获得正确的突出显示字符串内容。
获取以下 pdf:https ://www.irs.gov/pub/irs-pdf/iw8bene.pdf 。例如,如果它在预览中打开,则可以将内容复制并粘贴到 TextEdit 中。
如果我用 PDFView 打开这个 pdf,只能复制和粘贴一些文本(例如主标题),但正文只粘贴复制的空格!我没有自定义代码来处理我的 PDFView 上的副本。
如果我在突出显示文档时评估当前的 PDFSelection,我会在字符串中得到空格和无意义的字符:
for character in pdfSelection.string!.unicodeScalars {
print(character.value)
}
示例结果:
32
1113109
1113135
1113135
1113109
32
1113118
1113091
32
不管有什么问题,标准的复制代码也违反了它,所以也许我缺少 PDFView 或 PDFDocument 上的一些设置问题?我只需在 Interface Builder 中创建一个 PDFView,然后打开一个带有 URL 的 PDFDocument 并将其设置在视图上。
解决方案
这个问题是在我的应用程序的其他地方引起的,但仍然与 PDFDocument 相关。将 pdf 拖到我的应用程序时,我创建了一个 PDFDocument 来检查有效性,然后将该项目保存到应用程序的文件夹中:
guard let pdf = PDFDocument(url: fileURL) else { ... }
guard pdf.write(to: documentURL(forID: documentID, andType: .pdf)) else { ... }
正是文件的这种处理导致它被巧妙地修改/破坏。
基于 pdf 的复杂性,这对我来说太天真了。以后我会简单地复制原始文件。
推荐阅读
- django - 带有 Django REST 框架的 RBAC
- python-3.x - “此 python 中不包含 SSL 支持”Anaconda-python3-smtplib
- kohana-3 - Kohana 3 - 将模型保存到数据库中,关系为 belongs_to
- asp.net-mvc - ASP MVC Identity 2 让用户成为“用户”角色
- ruby-on-rails - Ruby - LoadError:无法加载此类文件 - ../credentials_go_in_var_lib/credentials
- java - 如何在 Keystore 中找到证书
- javascript - 如何评估 JSON 的键以匹配特定键并提取该键的值?
- julia - JuMP 变量声明:MethodError
- r - 使用 dplyr 将异常值替换为 R 中多层数据的平均值
- spi - Attiny 84 通过 SPI 故障与 RTC 通信