首页 > 解决方案 > 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 并将其设置在视图上。

标签: cocoaios-pdfkitapple-pdfkit

解决方案


这个问题是在我的应用程序的其他地方引起的,但仍然与 PDFDocument 相关。将 pdf 拖到我的应用程序时,我创建了一个 PDFDocument 来检查有效性,然后将该项目保存到应用程序的文件夹中:

guard let pdf = PDFDocument(url: fileURL) else { ... }
guard pdf.write(to: documentURL(forID: documentID, andType: .pdf)) else { ... }

正是文件的这种处理导致它被巧妙地修改/破坏。

基于 pdf 的复杂性,这对我来说太天真了。以后我会简单地复制原始文件。


推荐阅读