【发布时间】:2021-09-29 19:15:11
【问题描述】:
我需要在pdf中写一个5列的数据数组(图片是为了解释格式),我需要左上角的标题,右上角的图像徽标,换行符,然后是行和图中显示的列。我为此做的代码如下。但是需要进行一些更改才能获得所需的确切格式,请分享一些更好的解决方案,此解决方案是否有更改
//Create File
func createPDF() {
let text = gettudentDetails()
let html = "<p>\(text)</p> <hr>"
let fmt = UIMarkupTextPrintFormatter(markupText: html)
// 2. Assign print formatter to UIPrintPageRenderer
let render = UIPrintPageRenderer()
render.addPrintFormatter(fmt, startingAtPageAt: 0)
// 3. Assign paperRect and printableRect
let page = CGRect(x: 0, y: 0, width: 595.2, height: 841.8) // A4, 72 dpi
let printable = page.insetBy(dx: 0, dy: 0)
render.setValue(NSValue(cgRect: page), forKey: "paperRect")
render.setValue(NSValue(cgRect: printable), forKey: "printableRect")
// 4. Create PDF context and draw
let pdfData = NSMutableData()
UIGraphicsBeginPDFContextToData(pdfData, .zero, nil)
for i in 1...render.numberOfPages {
UIGraphicsBeginPDFPage();
let bounds = UIGraphicsGetPDFContextBounds()
render.drawPage(at: i - 1, in: bounds)
}
UIGraphicsEndPDFContext();
// 5. Save PDF file
let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
guard let outputURL = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent("studentRecord").appendingPathExtension("pdf")
else { fatalError("Destination URL not created") }
pdfData.write(toFile: "\(documentsPath)/studentRecord.pdf", atomically: true)
loadPDF(filename: "studentRecord.pdf")
}
//Get formated text
func gettudentDetails() -> String {
let image = #imageLiteral(resourceName: "splash_logo")
let imgData = image.jpegData(compressionQuality: 0.5)
var text = "<h1>Title Here </h1> <p><img src=\"\(imgData)\" alt=\"\" width=\"60\" height=\"72\" /></p> <hr> <br> </br> Nam   Father Name   Id   Age   DOB <hr> "
for record in pdfRecordsList {
let name = (record.obj?.firstName ?? "")
let FatherName = record.obj.fatherName ?? ""
let id = record.obj?.id ?? 0
let age = record.obj?.age ?? ""
let dob = record.obj?.dob ?? ""
text = text + "<p>" + name + " " + FatherName + " " + "\(id)" + " " + age + " " + dob + "</p>"
}
return text
}
//Load Pdf
func loadPDF(filename: String) {
let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
let url = URL(fileURLWithPath: documentsPath, isDirectory: true).appendingPathComponent(filename)
let urlRequest = URLRequest(url: url)
webView.load(urlRequest)
}
【问题讨论】:
标签: ios swift pdf-generation