RTL Support in Our iOS Viewer

PDF documents support a metaphorical page binding, which is used when pages are laid out horizontally. Many languages use a left-to-right script, which calls for a page binding on the left edge. However, binding on the right edge is preferable for right-to-left scripts such as Arabic and Hebrew and several East Asian scripts. The page binding is used with horizontal scrolling and in the thumbnails view. It has no effect when using vertical scrolling unless double-page mode is also enabled.

The page binding ought to be specified by the author when a PDF is created. However, sometimes this isn’t done, in which case, most PDF readers will default to a left-edge binding.

Updating the Page Binding Programmatically

PSPDFKit for iOS uses the Document.pageBinding property to infer how a document should be presented to the user. The possible values are:

  • .leftEdge — The document flows from left to right

  • .rightEdge — The document flows from right to left

  • .unknown — The document doesn’t explicitly define a page binding, so the behavior is the same as it is with .leftEdge

The following snippet updates the page binding property of a document:

let document = // This document should be read from right to left.
document.pageBinding = .rightEdge
try? document.save()
PSPDFDocument *document = // This document should be read from right to left.
document.pageBinding = PSPDFPageBindingRightEdge;
[document saveWithOptions:nil error:nil];

When the page binding of a document is updated, PDFViewController.reloadData() needs to be called so that the user interface is updated to match the new value. Please note that new values set to the property won’t be persisted until the document is saved — which can happen either through an explicit call to Document.save(options:) or when a checkpoint trigger is fired — if document checkpointing is enabled.

Affected Components

The following UI components will change their behavior based on the current document’s page binding. Keep in mind that all other UI components that aren’t mentioned here will follow the layout direction provided by the currently selected locale.

Document View

  • When in horizontal scrolling mode, documents with the .rightEdge page binding will scroll from right to left instead of the default left to right.

  • When in vertical double-page mode, documents with the .rightEdge page binding will have their displayed page order flipped pairwise. So the right page will be the first one, the left page will be the second one, and so on.

The Thumbnail Bar

  • In documents with the .rightEdge page binding, the order of thumbnails will be flipped, so the first page will be on the right and the last page will be on the left.

  • This also applies when in double-page mode, where the order of the pages in the pairs is also flipped.

The Thumbnail Grid

  • In documents with the .rightEdge page binding, the thumbnails will be laid out from right to left, so the first page will be on the top right.

Updating the Page Binding via the UI

PSPDFKit 8.5 for iOS introduced the ability to edit a document’s page binding directly from the PDFDocumentInfoViewController.

Editing the page binding

Since changing the page binding of a document requires it to be reloaded for the changes to be visible to the user, if you implement a PDFDocumentInfoViewController instance manually (as in not being invoked by PDFViewController directly), make sure you also implement the relevant PDFDocumentInfoViewControllerDelegate methods to reload the document when appropriate.