Swift UITextView转PDF文件

import UIKit
import PDFKit

extension UITextView {
    
    func generatePDF(filePath: String, success: ()->(), failure: ()->()) {
        // 创建 UIPrintPageRenderer
        let printRenderer = UIPrintPageRenderer()
        
        // 获取 UITextView 的打印格式化器
        let textViewFormatter = viewPrintFormatter()
        
        // 将打印格式化器添加到 UIPrintPageRenderer 中
        printRenderer.addPrintFormatter(textViewFormatter, startingAtPageAt: 0)
        
        // 定义 A4 纸尺寸(单位:点,1 英寸 = 72 点)
        let a4Size = CGSize(width: 595.2, height: 841.8)
        // 定义页边距
        let margin: CGFloat = 10
        let printableRect = CGRect(x: margin,
                                   y: margin,
                                   width: a4Size.width - 2 * margin,
                                   height: a4Size.height - 2 * margin)
        let paperRect = CGRect(origin:.zero, size: a4Size)
        
        // 设置打印页面的尺寸和边距
        printRenderer.setValue(NSValue(cgRect: paperRect), forKey: "paperRect")
        printRenderer.setValue(NSValue(cgRect: printableRect), forKey: "printableRect")
        
        // 创建一个可变数据对象,用于存储生成的 PDF 数据
        let pdfData = NSMutableData()
        UIGraphicsBeginPDFContextToData(pdfData, paperRect, nil)
        
        for pageIndex in 0..<printRenderer.numberOfPages {
            UIGraphicsBeginPDFPage()
            printRenderer.drawPage(at: pageIndex, in: UIGraphicsGetPDFContextBounds())
        }
        
        UIGraphicsEndPDFContext()
        
        guard let pdf = PDFDocument(data: pdfData as Data) else { return }
        pdf.write(to: URL(fileURLWithPath: filePath))
        
        if FileManager.default.fileExists(atPath: filePath) {
            success()
        } else {
            print("Failed to convert text to PDF.")
            failure()
        }
    }
}

使用:

let uiTextView = UITextView(frame: CGRect(x: 0, y: 0, width: 200, height: 300))
uiTextView.text = "Test"
view.addSubview(uiTextView)

let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let filePath = documentsDirectory.appendingPathComponent("test.pdf").path

uiTextView.generatePDF(filePath: filePath) { [weak self] in
    guard let `self` = self else { return }
} failure: {
    
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容