You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SwiftUI将多张图片渲染为多页PDF文档

解决方案:生成每页单图的自定义尺寸PDF

以下是修改后的代码,实现遍历图片并生成每页一张图的多页PDF,同时支持自定义页面尺寸:

struct ExportImagesView: View {
    
    var body: some View {
        ShareLink("Export Licence as PDF", item: render())
    }

    func render() -> URL {
        // 存储所有需要生成PDF的图片名称
        let imageNames = ["Page1", "Page2", "Page3"]
        // 自定义PDF页面尺寸,按需修改宽高值
        let customPageSize = CGSize(width: 612, height: 792)
        let url = URL.documentsDirectory.appending(path: "output.pdf")
        
        // 创建PDF文件上下文
        var mediaBox = CGRect(origin: .zero, size: customPageSize)
        guard let pdfContext = CGContext(url as CFURL, mediaBox: &mediaBox, nil) else {
            return url
        }
        
        // 遍历每张图片,生成单独的PDF页面
        for imageName in imageNames {
            // 创建适配页面尺寸的图片视图
            let imageView = Image(imageName)
                .resizable()
                .scaledToFit()
                .frame(width: customPageSize.width, height: customPageSize.height)
            
            // 渲染当前图片视图到PDF页面
            let renderer = ImageRenderer(content: imageView)
            renderer.render { size, context in
                pdfContext.beginPDFPage(nil)
                context(pdfContext)
                pdfContext.endPDFPage()
            }
        }
        
        // 完成PDF写入并关闭上下文
        pdfContext.closePDF()
        return url
    }
}

关键修改说明:

  • 批量处理图片:将图片名称存入imageNames数组,通过循环实现批量生成页面,后续新增图片只需在数组中添加名称即可
  • 自定义页面尺寸:通过customPageSize常量设定PDF页面的宽高,可根据需求替换为任意数值(比如A4尺寸为CGSize(width: 595, height: 842))
  • 图片适配:给图片添加resizable()和scaledToFit()修饰符,确保图片按比例适配页面尺寸,避免超出或留白过多(可根据需求调整为scaledToFill()或其他布局方式)
  • 多页PDF生成:先创建全局PDF上下文,循环中为每张图片开启新的PDF页面,渲染完成后关闭上下文,保证所有页面写入同一个PDF文件

内容的提问来源于stack exchange,提问作者alionthego

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 07:25:32