如何用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
相关产品推荐
相关产品推荐

