相关文章推荐
粗眉毛的柑橘  ·  typescript - How can ...·  1 年前    · 
大力的长颈鹿  ·  system xml ...·  1 年前    · 
失恋的煎鸡蛋  ·  Android高级ui11-banner ...·  1 年前    · 
才高八斗的钢笔  ·  unity 引用using ...·  1 年前    · 
Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

PDFKit - PDFView using pageViewController - page rendering slow when swiping to next page

Ask Question
    let pdfView = PDFView()
    let pdfDoc = PDFDocument(url: Bundle.main.url(forResource: "test", withExtension: "pdf")!)
    pdfView.document = pdfDoc
    pdfView.autoScales = true
    pdfView.displayDirection = .horizontal
    pdfView.usePageViewController(true, withViewOptions: [:])

Whenever I swipe to get to the next page, said next page is blurry for half a second before it's rendered sharply. That is quite annoying. Can I somehow preload the pages? I haven't found any attributes/methods in the documentation.

(Interestingly, I have the exact same problem in Preview on MacOS when it's in fullscreen mode [since forever, on every mac I own])

It's not reliant on pdf (file) size. The problem occurs with every pdf I tried.

Thanks for any help

Would you please try with this code: if let documentURL = Bundle.main.url(forResource: "download", withExtension: "pdf"), let document = PDFDocument(url: documentURL), let page = document.page(at: 0) { pdfView?.document = document pdfView?.autoScales = true pdfView?.backgroundColor = UIColor.lightGray pdfView?.displayDirection = .horizontal pdfView?.displayMode = .singlePageContinuous pdfView?.usePageViewController(true, withViewOptions: [:]) } – Razib Mollick Mar 17, 2018 at 12:27 Still the same problem. This also just adds pdfView?.displayMode = .singlePageContinuous and why do you need let page = document.page(at: 0) when its not being used? – SwiftedMind Mar 17, 2018 at 12:32 This code works perfectly for me. I have some other code regarding the page, I just gave you the pdf loading part code. Did you test your code on a device? – Razib Mollick Mar 17, 2018 at 12:51 ah ok. Yes, I tested it on Ipad Pro 2, iPhone 7 and the Simulator. It's the same on every device. It's very strange – SwiftedMind Mar 17, 2018 at 12:52

I think this is due to the high resolution of your PDF and the way PDFView renders PDF. Do you have more information on your PDF?

Could you try with a PDF with less heavy images? It should render fine. If so, it's not your code which is at fault, but the resources needed to display and render it to the view.

UPDATE

You can try using the PDFView without PageViewController and see you it behaves. You could do this:

pdfView = PDFView(frame: view.frame)
pdfView.backgroundColor = UIColor.white
var documentName: String = "test"
if let documentURL = Bundle.main.url(forResource: documentName, withExtension: "pdf") {
    if let document = PDFDocument(url: documentURL) {
        pdfView.autoScales = true
        pdfView.displayDirection = .horizontal
        pdfView.displayMode = .singlePageContinuous
        pdfView.document = document
self.view.addSubview(pdfView)

Does it behave differently? I've notice that the option usePageViewController loads the document faster for big PDF documents. Something to take into consideration when implementing.

I hope this helps

No, it's not the resolution. As I said, I tried multiple different PDF. I tried huge high-resolution image PDFs and text-only small PDF. The result was the same (The screenshot in the comments is from a high-resolution one, only because it's easier to see there). And the code above is literally all I have written (besides setting AutoLayout constraints and adding it as subview). – SwiftedMind Mar 27, 2018 at 7:59 Regarding your update. Yeah, I tried that. Using .singlePageContinuous it renders perfectly fast without any problems (even in the Simulator almost). But I don't want it to be continuous, unfortunately. It is extremely strange :D – SwiftedMind Mar 27, 2018 at 8:49

Please make sure to add values of .maxScaleFactor .minScaleFactor also as per your requirement and see if it makes any difference in the loading time.

.maxScaleFactor = 4.0;
.minScaleFactor = self.scaleFactorForSizeToFit;
                Just tried it. No change. Still slow. I think it shouldn't have any significant effects, anyway. I coded my own pdf viewer from the ground up and am able to render every pdf file full scale without any problems. Still, I'm curious why Apple's own PDFKit has problems with that.
– SwiftedMind
                Apr 8, 2018 at 14:02
                Quantm- I'm looking for a pdf viewer. Can you provide additional details regarding the one you made on some sample code?
– Hblegg
                May 14, 2020 at 1:53
        

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.