当前位置: 首页 > 知识库问答 >
问题:

使用PDFKit删除高亮注释

云承弼
2023-03-14

用户可以正常选择文本,然后从UIMENU中选择“高亮显示”或“删除高亮显示”。

为了在选择文本时自定义pdfView,我已经更改了出现的菜单-首先通过删除默认操作:

extension PDFView {
    override public func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
        return false
    }
}

然后在viewDidLoad()中设置了自定义UIMenuItems:

let menuItem1 = UIMenuItem(title: "Highlight", action: #selector(highlightSelection(_:)))        
let menuItem2 = UIMenuItem(title: "Remove highlight", action: #selector(removeHighlightSelection(_:)))
UIMenuController.shared.menuItems = [menuItem1, menuItem2]
@objc func highlightSelection(_ sender: UIMenuItem) {
            let selections = pdfViewer.currentSelection?.selectionsByLine()
            guard let page = selections?.first?.pages.first else { return }

            selections?.forEach({ selection in
                let highlight = PDFAnnotation(bounds: selection.bounds(for: page), forType: .highlight, withProperties: nil)
                highlight.color = .yellow
                page.addAnnotation(highlight)
            })
    }

当我选择突出显示的文本时,我希望用户能够通过点击“删除突出显示”来删除突出显示注释,但我根本无法想出如何仅仅删除隐藏在所选文本“后面”的注释。

这段代码正在工作,但删除了整个页面上的所有注释:

@objc func removeHighlightSelection(_ sender: UIMenuItem) {
        let selections = pdfViewer.currentSelection?.selectionsByLine()
        guard let page = selections?.first?.pages.first else { return }

        let annotationsToRemove = page.annotations

        for annotation in annotationsToRemove {
            page.removeAnnotation(annotation)
            print("Removed: \(annotation)")
        }
    }

那么,我如何只删除选定的高亮注释呢?

共有1个答案

宗政元青
2023-03-14

请注意以下通知:PDFViewAnnotationHitNotification:https://developer.apple.com/documentation/foundation/nsnotification/name/1504809-PDFViewanNotationHit

向通知侦听器添加目标

当按下注释时,从“pdfanNotationHit”的PDFViewAnnotationHitNotification的userInfo返回字典值,您将得到所按下的确切注释,一旦有了这个注释,就删除它。

 类似资料:
  • 问题内容: 我在iOS上使用PDFKit突出显示文本(PDF文件)。我通过创建PDFAnnotation并将其添加到选定的文本区域来实现。我想精确地突出显示所选区域,但它始终覆盖整行,如下图所示。如何仅为选定区域创建注释? 我的代码: 问题答案: 方法返回一个矩形以满足整个选择区域。不是您情况下的最佳解决方案。 尝试使用,并为每个矩形添加单独的注释,以表示PDF中的每个选定行。例:

  • 现在我想知道如何使用ITextSharp移除那些高亮显示的矩形。 它删除了所有的注释,但我想删除特定的注释。假设我在第1页突出了美国和专利申请出版物,现在我想单独删除美国。我会通过美国的文本。 我引用了这个答案。其中,要获得突出显示的文本,需要获得存储在突出显示注释中的坐标(存储在QuadPoints数组中),并且需要使用这些坐标解析页面内容中位于这些坐标处的文本。

  • 我在Word文档中突出显示了段落,我必须从每个段落的第3到第5个字符中删除突出显示。 通过搜索集合r=ActiveDocument中突出显示的范围。在VBA中,可以完美地找到文本段。 错误出现在。 编译错误:参数数量错误或无效的属性分配。 danI如何在范围内正确指定第3到第5个字符的子范围?谢谢你的帮助。

  • 有没有办法从一个巨大的xml文件中删除注释( 两者,根元素前的注释 和内的注释 最好的解决方案是使用xPath。我试过了 它适用于DOM,但不适用于vtd xml 这是我选择评论的代码 但此处的屏幕上打印的是nothing。 有没有办法用vtd xml做到这一点? 谢谢你的帮助。

  • applyChange()方法总是返回“unsuccessful”,我找不到任何关于注释删除不起作用的文档。 注:在http://sourceforge.net/p/owlapi/mailman/message/28203984/here似乎起作用

  • 问题内容: IntelliJ中是否有插件或工具可以将所有注释从源.java文件中删除?我已经阅读了有关可以执行此操作的[ANT任务的信息。希望在IDE中执行相同的操作。另外,也可以使用TextPad插件。 问题答案: 您可以在正则表达式模式下使用“替换”(如果要删除多个文件中的注释,则可以使用“在路径中替换”),然后在“查找文本”字段中使用此正则表达式: 并将其替换为空字符串。然后按“全部”,以将