This HTML page is not optimized for LLM or AI agent consumption. Fetch the Markdown version instead: /guides/ios/samples/disable-annotation-editing.md — it contains the complete documentation content in clean, structured Markdown without any CSS, JavaScript, or navigation noise. Disable PDF annotation editing in Swift for iOS

Use annotation flags to disable annotation editing. Get additional resources by visiting our guide on disabling annotation editing in iOS.


//
// Copyright © 2017-2026 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 PSPDFKit
import PSPDFKitUI
class LockAnnotationsExample: Example {
override init() {
super.init()
title = "Generate a new file with locked annotations"
contentDescription = "Uses the annotation flags to create a locked copy."
category = .annotations
priority = 1000
}
override func invoke(with delegate: ExampleRunnerDelegate) -> UIViewController {
let samplesURL = Bundle.main.resourceURL!.appendingPathComponent("Samples")
let documentURL = samplesURL.appendingPathComponent(AssetName.annualReport.rawValue)
let writableDocumentURL = documentURL.copyToDocumentDirectory()
// Copy the document to the temp directory.
let tempURL = FileHelper.temporaryPDFFileURL(prefix: "locked_\(writableDocumentURL.lastPathComponent)")
if FileManager.default.fileExists(atPath: writableDocumentURL.path) {
try? FileManager.default.copyItem(at: writableDocumentURL, to: tempURL)
} else {
try? FileManager.default.copyItem(at: documentURL, to: tempURL)
}
// Open the new file and modify the annotations to be locked.
let document = Document(url: tempURL)
document.annotationSaveMode = .embedded
// Create at least one annotation if the document is currently empty.
let allTypesButLinks = Annotation.Kind.all.subtracting(.link)
let allAnnotations = document.annotationsForPage(at: 0, type: allTypesButLinks)
if allAnnotations.isEmpty {
let ink = InkAnnotation.sampleInkAnnotation(in: CGRect(x: 100.0, y: 100.0, width: 200.0, height: 200.0))
ink.color = UIColor(red: 0.667, green: 0.279, blue: 0.748, alpha: 1.0)
ink.pageIndex = 0
document.add(annotations: [ink])
}
// Lock all annotations except links and forms/widgets.
let allTypesButLinkAndForms = Annotation.Kind.all.subtracting([.link, .widget])
for pageIndex in 0..<document.pageCount {
let annotations = document.annotationsForPage(at: pageIndex, type: allTypesButLinkAndForms)
for annotation in annotations {
// Preserve existing flags, just set the locked and locked contents flags.
annotation.flags.update(with: [.locked, .lockedContents])
}
}
// Save the document.
try? document.save()
print("Locked file: \(tempURL.path)")
let controller = PDFViewController(document: document)
return controller
}
}

This code sample is an example that illustrates how to use our SDK. Please adapt it to your specific use case.