Mục tiêu cuối cùng của tôi là tạo nhiều UIMarkupTextPrintFormatter
và in tất cả trong một lệnh in.Làm thế nào để AirPrint nhiều trình định dạng in trong một lần?
Ví dụ: trình định dạng đầu tiên chứa văn bản lấp đầy trang đầu tiên và một chút của trang thứ hai. Mặc dù vẫn còn không gian để in định dạng thứ hai, tôi muốn trình định dạng thứ hai in trên trang thứ ba. Vì vậy, về cơ bản, trước khi in một trình định dạng khác, hãy bắt đầu một trang mới.
Tôi không thể biết bao nhiêu trang một trình định dạng sẽ lấp đầy tại thời gian biên dịch vì nó phụ thuộc vào đầu vào của người dùng. Có thể 1, 2 hoặc nhiều hơn.
Tôi nghe nói rằng tôi cần phải sử dụng UIPrintPageRenderer
vì vậy tôi đọc tài liệu của mình và cố gắng này:
// I'm using webviews here because I don't want to write 2 pages worth of markup...
// it should be the same anyway. The two webviews display different wikipedia articles
// Also, don't judge my variable names. I'm lazy and this is just test code...
let formatter = webView.viewPrintFormatter()
let formatter1 = webView2.viewPrintFormatter()
formatter.contentInsets = UIEdgeInsets(top: 72, left: 72, bottom: 72, right: 72)
formatter1.contentInsets = UIEdgeInsets(top: 72, left: 72, bottom: 72, right: 72)
let renderer = UIPrintPageRenderer()
renderer.addPrintFormatter(formatter, startingAtPageAt: 0)
renderer.addPrintFormatter(formatter1, startingAtPageAt: formatter.pageCount)
printController.printPageRenderer = renderer
printController.present(animated: true, completionHandler: nil)
Để thêm các định dạng in thứ hai, tôi đã sử dụng formatter.pageCount
như là đối số thứ hai. Tôi hy vọng nó sẽ thêm trình định dạng thứ hai sau trang cuối cùng của trang đầu tiên. Nhưng nó không. Nó chỉ in những thứ trong định dạng thứ hai.
Tôi in formatter.pageCount
và thấy giá trị của nó là 0.
Tôi hoàn toàn bối rối. Làm thế nào tôi có thể nhận được bao nhiêu trang một trình định dạng sẽ lấp đầy?
Tôi cũng đã cố gắng để thực hiện kết xuất đồ họa của riêng tôi:
class MyRenderer: UIPrintPageRenderer {
override func drawPrintFormatter(_ printFormatter: UIPrintFormatter, forPageAt pageIndex: Int) {
printFormatter.draw(in: self.printableRect, forPageAt: pageIndex)
}
}
Nhưng sau đó nó chỉ bị treo khi bộ điều khiển tương tác in cho thấy:
Cố gắng để có được những khóa web từ một thread khác với chủ đề chính hoặc chuỗi web. Điều này có thể là kết quả của việc gọi đến UIKit từ một chuỗi thứ cấp. Đang đổ vỡ ...
Tôi đã làm gì sai trong mã của mình?
Bạn đang gọi nội dung giao diện người dùng từ một chuỗi không phải là chuỗi chính. Bạn _must_ chỉ gọi nội dung giao diện người dùng từ chuỗi chính. Hiển thị nơi bạn gọi mã này. Có lẽ từ bên trong trình xử lý hoàn tất của tác vụ tải xuống hoặc đại biểu của một chế độ xem web. – shallowThought
@shallowTôi nghĩ rằng tôi đang làm điều này trong một phương thức '@ IBAction', nên nằm trên chuỗi giao diện người dùng. – Sweeper
Nếu không nhìn thấy mã thực, rất khó để không thể giúp đỡ. – shallowThought