Swift中如何修改PDFKit生成PDF内的链接颜色?
解决PDFKit生成PDF时链接颜色无法修改的问题
当你通过text.draw(at:withAttributes:)添加带link属性的文本时,PDFKit会优先使用系统默认的链接样式(蓝色),直接覆盖你设置的foregroundColor属性。要解决这个问题,需要分开处理文本样式和链接交互:先绘制自定义颜色的文本,再手动给文本区域添加可点击的PDF链接。
修改后的完整代码
guard let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { fatalError("Cannot find document directory") } let url = documentsPath.appendingPathComponent("\(pdfTitle).pdf") let pdfRenderer = UIGraphicsPDFRenderer(bounds: view.bounds) hideTextView() do { try pdfRenderer.writePDF(to: url, withActions: { context in context.beginPage() view.layer.render(in: context.cgContext) // 1. 定义纯文本样式(黑色、下划线、字体),不包含link属性 let textAttributes = [ NSAttributedString.Key.font: UIFont.systemFont(ofSize: 14), NSAttributedString.Key.underlineStyle: NSUnderlineStyle.single.rawValue, NSAttributedString.Key.foregroundColor: UIColor.black ] as [NSAttributedString.Key : Any] // 2. 绘制黑色带下划线的文本 text.draw(at: textViewOrigin, withAttributes: textAttributes) // 3. 计算文本占据的矩形区域 let textSize = text.size(withAttributes: textAttributes) let linkRect = CGRect(origin: textViewOrigin, size: textSize) // 4. 给文本区域添加可点击的PDF链接 if let linkUrl = URL(string: "mailto:\(text)") { context.addLink(to: linkUrl, rect: linkRect) } }) } catch { print("Could not create PDF file: \(error)") }
关键说明
- 先绘制不带
link属性的文本,确保foregroundColor和underlineStyle完全生效,显示为你需要的黑色带下划线样式。 - 调用
context.addLink(to:rect:)方法,给文本对应的矩形区域绑定URL链接,这样既保留了自定义文本样式,又实现了点击跳转功能。
内容的提问来源于stack exchange,提问作者Shalugin
相关产品推荐
相关产品推荐

