Код создает черный ящик при преобразовании первой страницы PDF для ячейки представления коллекции.Как обойти это? - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь создать представление коллекции, которое отображает все PDF-файлы, которые есть у пользователя.В ячейке отображается изображение предварительного просмотра первой страницы PDF.Я могу отобразить изображение, но оно черное.

Я пробовал разные способы показать PDF как UIImageView, но это единственный способ показать что-то на экране.

func displayContent(document: DocumentModel) {
        let pdf: CGPDFDocument = CGPDFDocument(Bundle.main.url(forResource: document.title, withExtension: ".pdf")! as CFURL)!
        let pdfPage = pdf.page(at: 1)
        let pageRect = pdfPage?.getBoxRect(.mediaBox)
        let renderer = UIGraphicsImageRenderer(size: pageRect!.size)
        let data =  renderer.jpegData(withCompressionQuality: 0.5, actions: { cnv in
            //UIColor.white.set()
            cnv.fill(pageRect!)
            cnv.cgContext.translateBy(x: 0.0, y: pageRect!.size.height)
            cnv.cgContext.scaleBy(x: 1.0, y: -1.0)
            cnv.cgContext.drawPDFPage(pdfPage!)
        })
        self.previewImage.contentMode = .scaleAspectFit
        self.previewImage.clipsToBounds = true
        self.previewImage.image = UIImage(data: data)
        self.documentTitle.text = document.title
}

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

1 Ответ

0 голосов
/ 10 апреля 2019

Мне удалось решить эту проблему с помощью этого кода из взлома с помощью swift

Это код с сайта:

    func drawPDFfromURL(url: URL) -> UIImage? {
        guard let document = CGPDFDocument(url as CFURL) else { return nil }
        guard let page = document.page(at: 1) else { return nil }

        let pageRect = page.getBoxRect(.mediaBox)
        let renderer = UIGraphicsImageRenderer(size: pageRect.size)
        let img = renderer.image { ctx in
            UIColor.white.set()
            ctx.fill(pageRect)

            ctx.cgContext.translateBy(x: 0.0, y: pageRect.size.height)
            ctx.cgContext.scaleBy(x: 1.0, y: -1.0)

            ctx.cgContext.drawPDFPage(page)
        }

        return img
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...