Есть ли причина, по которой текст в моем PDF-файле не отображается в окне предварительного просмотра на iOS? - PullRequest
0 голосов
/ 02 мая 2018

По сути, я создаю файл PDF из снимков экрана пользователя. Представление содержит табличное представление с текстом и значками.

На самом деле процесс печати выполняется на бумаге правильно.

ОДНАКО, прямо перед нажатием последней кнопки «Печать» пользователь видит родной экран предварительного просмотра печати iOS. И в этом предварительном просмотре PDF значки отображаются, а метки нет.

Мое решение выполняет свою работу, но это может привести пользователя в замешательство и разочарование, если они не смогут увидеть точный предварительный просмотр того, что они пытаются напечатать.

func printPDF(pdf: Data) {
    if UIPrintInteractionController.canPrint(pdf) {
        let printInfo = UIPrintInfo(dictionary: nil)
        printInfo.jobName = "Minutes"
        printInfo.outputType = .photo
        let printController = UIPrintInteractionController.shared
        printController.printInfo = printInfo
        printController.showsNumberOfCopies = false
        printController.printingItem = pdf
        printController.present(animated: true, completionHandler: nil)
    }
}

func generatePDF() -> Data {

    // Determine number of pages to create in PDF
    let contentHeight = Int(tableView.contentSize.height)
    let tableHeight = Int(tableView.frame.height)
    pageCount = (contentHeight/tableHeight) + 1

    var currentPage = 1
    pageOutlet.text = "Page \(currentPage)/\(pageCount)"

    let pdfData = NSMutableData()
    UIGraphicsBeginPDFContextToData(pdfData, self.pdfContainerView.frame, nil)

    let context = UIGraphicsGetCurrentContext()

    for _ in 0..<pageCount {

        // Update page number at bottom of screen
        pageOutlet.text = "Page \(currentPage)/\(pageCount)"

        // Create new page
        UIGraphicsBeginPDFPage()
        pdfContainerView.layer.render(in: context!)

        // Adjust table view
        let originalYOffset = tableView.contentOffset.y
        let newOffset = originalYOffset + tableView.frame.height
        tableView.contentOffset = CGPoint(x: 0, y: newOffset)

        currentPage+=1  
    }

    UIGraphicsEndPDFContext()
    tableView.contentOffset = CGPoint(x: 0, y: 0)

    return pdfData as Data
}

1 Ответ

0 голосов
/ 03 мая 2018

Для каждой метки в представлении мне пришлось установить isOpaque в значение true и установить цвет фона меток в белый.

Я не знаю точно, почему это происходит, но мне удалось найти решение, поэтому я решил поделиться.

...