【发布时间】:2021-02-03 10:42:17
【问题描述】:
我想从视图 X 创建一个 PDF 文件。从 Alex 的问题中报告和提取的代码有效,但只创建了主视图的 PDF(视图 A)。我如何告诉他创建 View X 的 PDF?
Convert SwiftUI View to PDF on iOS
// From Main View A
func savePdf() {
let view = ViewX() // <--- This is the View I would like to transform, not linked to View A
let documentDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let outputFileURL = documentDirectory.appendingPathComponent("ViewX.pdf")
let dpiScale: CGFloat = 4
// for A5 page size inches * 72
let pageSize = CGSize(width: 5.8 * 72, height: 8.3 * 72)
let pdfVC = UIHostingController(rootView: view)
pdfVC.view.frame = CGRect(origin: .zero, size: pageSize * dpiScale)
let rootVC = UIApplication.shared.windows.first?.rootViewController
rootVC?.addChild(pdfVC)
rootVC?.view.insertSubview(pdfVC.view, at: 0)
let pdfRenderer = UIGraphicsPDFRenderer(bounds: CGRect(origin: .zero, size: pageSize))
DispatchQueue.main.async {
do {
try pdfRenderer.writePDF(to: outputFileURL, withActions: { (context) in
context.beginPage()
rootVC?.view.layer.render(in: context.cgContext)
self.pdfURL = outputFileURL
})
} catch {
print("error.localizedDescription")
}
}
pdfVC.removeFromParent()
pdfVC.view.removeFromSuperview()
}
【问题讨论】: