Show PDF in iPad using CGPDF APIs [closed]

梦想的初衷 提交于 2019-11-27 11:21:24

问题


I have learned Apple has release CGPDF APIs in SDK 3.2 for drawing PDF context.

What I understand from these APIs is that you can draw a PDF to a data object or a PDF file. You can then export it, may be, to your sandbox's directory OR add as an attachment in the mail.

But I am not sure if we can use these APIs to read a PDF from application bundle and show it to the user page-by-page on the screen. What I want to do is open a PDF of a magazine in a magazine reader app.

I was also wondering if we can identify the links in a PDF file and open them in the app.

Let me know if have done OR doing anything like this.

Thanks AJ


回答1:


In API documentation there is a way to load a PDF (with Quartz): CGPDFDocument is the object you need and CGPDFDocumentCreateWithURL is probably the constructor you are looking for.

Here are some examples on how to do it: http://developer.apple.com/mac/library/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_pdf/dq_pdf.html#//apple_ref/doc/uid/TP30001066-CH214-TPXREF109

I have spent a lot of time on this - and it seems you need to use CATiledLayers to zoom those PDFs properly!

There are some good examples on the net on how to do that...

I will put a link/solution here as soon as I have something ready!




回答2:


Displaying the PDF with the Quartz APIs is pretty easy. But there's no native support for link annotations. Basically, you need to parse the "Annots" dictionary inside the pdf, and then find the correct page (which can be GoTo references, or named references, or ~10 other types; see the Adobe PDF Reference 1.7 document, the section about Actions), and the calculate the coordinates to the displayed page.

I've written a [commercial] library that includes parsing link annotations, and many more features. You may wanna check out http://pspdfkit.com



来源:https://stackoverflow.com/questions/3042775/show-pdf-in-ipad-using-cgpdf-apis

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!