iOS swift开发--- 加载PDF文件并显示内容

iOS开发采用pdfkit ,可以很方便的读取pdf的内容。以下是简易的显示pdf内容的代码

Swift 复制代码
import UIKit
import PDFKit
 
 
class ViewController: UIViewController, UIDocumentPickerDelegate {
 
    var pdfView: PDFView!  //创建一个控件显示内容
    
    let selectPDFButton = UIButton(type: .system)  //点击按钮选择打开pdf文件
 
   
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .white

        selectPDFButton.setTitle("Select PDF", for: .normal)
        selectPDFButton.addTarget(self, action: #selector(selectPDF), for: .touchUpInside)
        selectPDFButton.translatesAutoresizingMaskIntoConstraints = false

        view.addSubview(selectPDFButton)
        pdfView = PDFView()
        pdfView.backgroundColor = .red
        pdfView.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(pdfView)

 
        selectPDFButton.topAnchor.constraint(equalTo: view.topAnchor, constant: 120).isActive = true
        selectPDFButton.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20).isActive = true
        selectPDFButton.widthAnchor.constraint(equalToConstant: 100).isActive = true
        selectPDFButton.heightAnchor.constraint(equalToConstant: 50).isActive = true

        // 设置 pdfView 的约束
           pdfView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20).isActive = true
           pdfView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20).isActive = true
           pdfView.topAnchor.constraint(equalTo: selectPDFButton.bottomAnchor, constant: 120).isActive = true
           pdfView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -20).isActive = true

 

        
    }
    

    @objc func selectPDF() {
   
        let documentPicker = UIDocumentPickerViewController(forOpeningContentTypes: [.pdf])
        documentPicker.delegate = self
        present(documentPicker, animated: true, completion: nil)
    }
    
 
    
    func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
        guard let url = urls.first else { return }
        selectedPDFURL = url
        
        // 请求安全范围内的资源访问,这个startAccessingSecurityScopedResource很关键,否则可能打不开文件
        guard url.startAccessingSecurityScopedResource() else {
            print("Failed to start accessing security-scoped resource.")
            showErrorMessage("Failed to access the selected file.")
            return
        }
        
        defer {
            url.stopAccessingSecurityScopedResource()
        }
        

        // 尝试加载 PDF 文档
            guard let pdfDocument = PDFDocument(url: url) else {
                // 如果无法加载 PDF 文档,打印错误信息
                print("Failed to load PDF document at URL: \(url)")
                showErrorMessage("Failed to load PDF document.")
                return
            }
        print("load PDF document  success ")
        pdfView.document = pdfDocument
        pdfView.autoScales = true
        pdfView.layoutSubviews()
     
        print("load PDF document  success ")
        // 可以在这里显示一些提示,告知用户文件已选择
        let alertController = UIAlertController(title: "Info", message: "PDF file selected successfully.", preferredStyle: .alert)
        alertController.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
        present(alertController, animated: true, completion: nil)
        
    // 显示 PDF 文件
   
    }
    
    private func showErrorMessage(_ message: String) {
            let alertController = UIAlertController(title: "Error", message: message, preferredStyle: .alert)
            alertController.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
            present(alertController, animated: true, completion: nil)
        }
        
        private func showSuccessMessage(_ message: String) {
            let alertController = UIAlertController(title: "Success", message: message, preferredStyle: .alert)
            alertController.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
            present(alertController, animated: true, completion: nil)
        }

    
}
相关推荐
徐赛俊8 小时前
IOS快捷指令:一键静音 / 恢复
ios
2501_9159184111 小时前
常见 iOS 抓包工具的使用,从代理抓包、设备抓包到数据流抓包
android·ios·小程序·https·uni-app·iphone·webview
handsome091613 小时前
uniapp打包的app,报This app was built with the iOS 18.1 SDK解决方案
ios·uni-app
大熊猫侯佩15 小时前
Swift 6 驱魔实录:揭开 Combine 与 @Sendable 的“血色契约”
swift·block·combine·preconcurrency·sendable·mainactor·isolation
初级代码游戏16 小时前
iOS开发 SwiftUI 15:手势 拖动 缩放 旋转
ios·swiftui·swift
MaiTube&Maipdf18 小时前
麦瓜PDF 的安全分享流程图:从上传到权限控制
pdf·流程图
CodeCaptain18 小时前
【一】dify的知识库上传过相关的文件作为待引用的文档,这样已经与[原始语料 → 按“一文档一份 PDF”存 ObjectStore]同样的概念吗
人工智能·pdf·dify
ujainu19 小时前
Flutter + OpenHarmony 游戏开发进阶:虚拟摄像机系统——平滑跟随与坐标偏移
开发语言·flutter·游戏·swift·openharmony
森之鸟19 小时前
iOS云打包之Shorebird
ios
GuokLiu19 小时前
260203-OpenWebUI-在Windows上和RHEL上部署Caddy的步骤+在iPhone上操作的步骤
windows·ios·iphone