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)
        }

    
}
相关推荐
Source.Liu1 小时前
【PDF】PDF文件体详解
pdf
非凡ghost1 小时前
批量转双层PDF(可识别各种语言) 中文绿色版
前端·windows·pdf·计算机外设·软件需求
夏之繁花1 小时前
PDFelement 万兴PDF,简单好用的PDF阅读编辑批注器
pdf
打小就很皮...1 小时前
PDF 下载弹窗 content 区域可行性方案
前端·javascript·pdf
00后程序员张10 小时前
如何提高 IPA 安全性 多工具组合打造可复用的 iOS 加固与反编译防护体系(IPA 安全 iOS 加固 无源码混淆 Ipa Guard 实战)
android·安全·ios·小程序·uni-app·iphone·webview
洞窝技术14 小时前
前端开发APP之跨平台开发(ReactNative0.74.5)
android·react native·ios
拓端研究室14 小时前
专题:2025机器人产业的变革与展望白皮书:人形机器人与工业机器人洞察|附130+份报告PDF、数据、绘图模板汇总下载
人工智能·机器人·pdf
qq_4203620314 小时前
PDF导出服务
前端·pdf·状态模式·node·puppeteer
EricStone14 小时前
iOS语音转换SDK相关记录
ios
家有两宝,感恩遇见15 小时前
pdf文件上传下载记录
pdf