如果iPad上的swiftUI视图内容高度超过1500,我想创建多页PDF。
我在谷歌上尝试的多种解决方案都不起作用。
我需要将我的整个SwiftUI视图转换为iPad上的多个PDF页面。
SwiftUI视图的大小= CGSize(width:1118.0,,身高:1700.0)
我在这里添加了我的看法,我希望到PDF的多个页面的看法,因为我的看法的高度超过A4大小的高度。
@MainActor func render(view: some View) -> URL? {
// 1: Render Hello World with some modifiers
if #available(iOS 16.0, *) {
let renderer = ImageRenderer(content: view)
// 2: Save it to our documents directory
let documentDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let url = documentDirectory.appendingPathComponent("SwiftUIPDF1.pdf")
print(url)
// 3: Start the rendering process
renderer.render { size, context in
// 4: Tell SwiftUI our PDF should be the same size as the views we're rendering
var box = CGRect(x: 0, y: 0, width: size.width, height: size.height)
// 5: Create the CGContext for our PDF pages
guard let pdf = CGContext(url as CFURL, mediaBox: &box, nil) else {
return
}
// 6: Start a new PDF page
pdf.beginPDFPage(nil)
// 7: Render the SwiftUI view data onto the page
context(pdf)
// 8: End the page and close the file
pdf.endPDFPage()
pdf.closePDF()
}
return url
} else {
// Fallback on earlier versions
}
return nil
}
1条答案
按热度按时间zpgglvta1#
我没有一个复制和粘贴代码的解决方案给你,但我可以提供一个算法,你需要做什么来创建一个多页的PDF。
您的代码创建一个PDF页面的原因是因为代码只创建一个PDF页面。您只调用
beginPDFPage
和endPDFPage
一次。您必须为PDF中的每个页面调用这些函数一次。首先创建一个变量,存储视图中开始绘制PDF页面的位置。将此变量的初始值设置为0。
当起始位置小于视图大小时,请执行以下操作:
beginPDFPage
。endPDFPage
。创建完PDF页面后调用
closePDF
。