首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift PDFKit在单个PDFPage中绘制多幅图像

Swift PDFKit在单个PDFPage中绘制多幅图像
EN

Stack Overflow用户
提问于 2022-11-03 00:00:16
回答 1查看 61关注 0票数 1

我试图将多个图像绘制到一个PDFPage中。

查看文档和StackOverflow上的文档似乎是我得到的最好的方法是使用PDFPageUIImage初始化器,如下所示:

代码语言:javascript
复制
let pdfPage = PDFPage(image: image)

但它只是创建了一个全页图像的页面。我试图使用CGContext绘制图像,但我不知道如何在绘图上下文中使用PDFPage来快速绘制图像,如下面的示例所示。

代码语言:javascript
复制
let bounds = page.bounds(for: .cropBox)

// Create a `UIGraphicsImageRenderer` to use for drawing an image.
let renderer = UIGraphicsImageRenderer(bounds: bounds, format: UIGraphicsImageRendererFormat.default())

let image = renderer.image { (context) in

 // How do I rapidly draw them here?

}

任何帮助都将不胜感激!

我在PDFPage(image: <UIImage>)和预期结果之间得到的结果:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-03 13:21:44

您可能需要改进循环中图像的定位逻辑,但这应该指向正确的方向。

代码语言:javascript
复制
import UIKit
import PDFKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
              
        let pdfView = PDFView()
        pdfView.frame = CGRect(x: 0, y: 50, width: view.frame.width, height: view.frame.height - 50)
        if let d = createPDFDocument() {
            pdfView.document = d
        }
        
        view.addSubview(pdfView)
    }

    func createPDFDocument() -> PDFDocument? {
        let pdfDocument = PDFDocument()
        let page = PDFPage()
        let bounds = page.bounds(for: .cropBox)
        let imageRenderer = UIGraphicsImageRenderer(bounds: bounds, format: UIGraphicsImageRendererFormat.default())
        let image = imageRenderer.image { (context) in
            context.cgContext.saveGState()
            context.cgContext.translateBy(x: 0, y: bounds.height)
            context.cgContext.concatenate(CGAffineTransform.init(scaleX: 1, y: -1))
            page.draw(with: .mediaBox, to: context.cgContext)
            context.cgContext.restoreGState()

            // Improve logic for image position
            Range(1...4).forEach { value in
                let image = UIImage(named: "YOUR_IMAGE_NAME")
                let rect = CGRect(x: 50 * value, y: 0, width: 40, height: 100)
                image?.draw(in: rect)
            }
        }
        
        let newPage = PDFPage(image: image)!
        pdfDocument.insert(newPage, at: 0)

        return pdfDocument
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74296830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档