Select all text in a PDF using Swift for iOS
Add an “Select All” item to the menu to select all text within a document. Get additional resources by visiting our guide on selecting text in our iOS viewer.
////  Copyright © 2021-2025 PSPDFKit GmbH. All rights reserved.////  The Nutrient sample applications are licensed with a modified BSD license.//  Please see License for details. This notice may not be removed from this file.//
import PSPDFKitimport PSPDFKitUI
class SelectAllTextExample: Example, PDFViewControllerDelegate {
    override init() {        super.init()        title = "Select All Text"        contentDescription = "Shows how to add a “Select All” item to the menu."        category = .viewCustomization    }
    override func invoke(with delegate: ExampleRunnerDelegate) -> UIViewController? {        PDFViewController(document: AssetLoader.document(for: .annualReport), delegate: self)    }
    private func selectAllAction(for pageView: PDFPageView) -> UIAction? {        // Make sure there is selectable text on page.        guard let glyphs = pageView.presentationContext?.document?.textParserForPage(at: pageView.pageIndex)?.glyphs, !glyphs.isEmpty else {            return nil        }        // Make sure we haven't selected all text already.        guard pageView.selectionView.selectedGlyphs.count != glyphs.count else {            return nil        }        return UIAction(title: "Select All", image: UIImage(systemName: "a.square.fill")) { _ in            // We need to manually sort the glyphs.            pageView.select(glyphs: glyphs, animated: true)        }    }
    func pdfViewController(_ sender: PDFViewController, menuForCreatingAnnotationAt point: CGPoint, onPageView pageView: PDFPageView, appearance: EditMenuAppearance, suggestedMenu: UIMenu) -> UIMenu {        if let action = selectAllAction(for: pageView) {            return suggestedMenu.prepend([action])        } else {            return suggestedMenu        }    }
}This code sample is an example that illustrates how to use our SDK. Please adapt it to your specific use case.