PSPDFKit writes annotations in accordance with the standardized ISO 32000-1:2008 PDF specification. Any ISO-compliant viewer (like Adobe Acrobat) will be able to display and edit such annotations and forms. In using standard compliant software, annotations can, for example, be created using PSPDFKit for iOS, edited in Adobe Acrobat for Windows, and later displayed and edited/deleted on PSPDFKit for Web or Android. Our shared core ensures that annotations created with PSPDFKit SDKs from multiple platforms are especially compatible and render similarly. (However, some icons, like notes, have been tweaked to better match their respective platforms.)
You can evaluate our compatibility via the free PDF Viewer apps for iOS, macOS, and Android and our PSPDFKit for Web demo instance. The default viewers that ship with operating systems are not always as capable.
Apple uses a custom PDF renderer (CGPDF) that’s part of Core Graphics. It’s quite capable, but it is known to crash/freeze or not show content on several files or certain API call combinations. Most of these radars are unresolved to this day. As of PSPDFKit 5 for iOS, we switched to a custom renderer because of these issues, and because Apple’s focus is clearly not on improving its PDF rendering engine.
However, the above issues are edge cases. Most documents render correctly or well enough to be usable. Annotations are a different story. While — as long as an appearance stream is emitted — most annotations render correctly, there are issues related to rotated documents. For example, Preview doesn’t correctly handle editing documents containing stamp annotations, which results in stamps appearing differently or not at all when a document is opened again in Preview or any other PDF reader. Preview sometimes gets things right where Quick Look fails — Apple seems to have both two different teams working on these features and not much shared code, which results in different bugs for different features. Editing forms partly works in Preview, whereas saving a document often destroys a lot of metadata or the form itself.
Apple improved PDF support in iOS 11 with the introduction of PDFKit, which has existed on macOS since 10.4. We offer a migration guide for moving from PDFKit to PSPDFKit, and this guide explains some of the differences. iOS 11 extends annotation support and is able to display the most commonly used annotations (highlight, ink, free text). There are still significant bugs and issues where annotations aren’t displayed, are mirrored, or are positioned incorrectly. iOS 11 also allows annotating PDF documents, but this component is not accessible to apps and can only be invoked from the system directly. These annotations are partly standard compliant but include Apple-specific additions. Displaying them in other viewers works correctly, but editing them will remove any Apple-specific additions.
iOS has had a native PDF renderer since iOS 2. The renderer is shared with the Mac, though there are often different bugs based on the different internal versions and architecture. The renderer is reasonably fast. Apple announced support for PDF annotations in iOS 7 at WWDC, but this never really worked, and Apple stopped mentioning this feature. In practice, this means most annotations don’t work or aren’t displayed at all. The custom annotation support is also part of an internal framework called CorePDF, which is used as part of Quick Look and Safari. It allows vertical scrolling and text selection. However, there’s no way to customize anything, use custom encryption, or draw on pages — you can’t even preselect a page. It makes for a very basic reading experience.
Third-party apps can either use Quick Look or go down to the C level and use
CGContextDrawPDFPage to draw into a memory buffer/image. Building a viewer from scratch is time consuming, and it’s hard to get the details right. Many apps choose the PSPDFKit SDK to get the best of both worlds: a friendly, customizable framework that fully fits into applications, and a framework that’s fast and allows both annotations and forms to be created/filled out.
PDF Viewer, Tiny PDF, and PDF Box use PSPDFKit for rendering and editing annotations. There are many other popular iOS apps that use PSPDFKit. However, due to NDA restrictions, we cannot list all of them. You’ll usually notice our iconic annotation toolbar and the bottom scrubber bar as the typical polished PSPDFKit experience.
Annotation replies are a feature of PDF documents, and they enable users to have written discussions directly inside a document. See the Replies guide for more details on third-party compatibility.
Google added basic PDF rendering support to Android as of API level 21 (Android 5.0 Lollipop). This is mostly meant for printing and is far more limited than the already very limited PDF support in iOS. This API cannot be used to extract critical information like PDF links, annotations, bookmarks, page labels, or any other metadata, and thus is not complete enough to build a great PDF experience with. (However, it’s good enough for printing, which was Google’s entire motivation for adding it.)
Since Android didn’t have a native renderer for a long time, and since the current one is still very limited, there are a number of third-party frameworks. Note that many of them are GPL-licensed, which would force you to open source your entire application if you use them. Examples of these are MuPDF/VuDroid/apv/apdfviewer, Poppler, and iText. If you choose PSPDFKit for Android, you get a commercial license that doesn’t have any of the (A)GPL drawbacks.
Google Chrome has used its own PDF renderer since version 6. It has been improved upon over time and can render annotations and forms. This viewer is used across Windows, Mac, and Linux.