[NTG-context] PDF viewer

Max Chernoff mseven at telus.net
Fri Sep 23 02:47:50 CEST 2022

Hi Hraban,

> I compiled a kind of wishlist what we need or look for in a new or 
> enhanced open source PDF viewer, as discussed e.g. at the 2021 meeting.
> https://wiki.contextgarden.net/PDF_viewer
> Feel free to enhance the wiki page or discuss here.

I think that pdf.js (the Firefox PDF viewer) meets most of these
requirements. There are a few requirements that it doesn't meet, but
it's open source and written in JavaScript, so we should be able to add
anything that's missing.

Going down the list on the Wiki:

> in general:
>  - PDF 2.0 compatible

It can open PDF 2.0 files, but I doubt that it supports every single

>  - proper color and transparency display (respect color profiles)

It supports all of the PDF colour models/profiles for vectors, although
it ignores embedded colour profiles in images.


Regular RGB and CMYK stuff works fine though.

>  - limited JavaScript support (no modification, no file operations)

Yes, although it is quite limited:


>  - search


>  - update on file change (configurable)

Not by default in Firefox. It works fine in this extension though:


>  - keyboard control for as much as possible (but also menus/menubars)


>  - sidebar for bookmarks/ToC


>  - SyncTeX support

Not in Firefox, although there are patches to enable it:


>  - accessibility (e.g. alternative text must work)

I've never used it, but it looks like there's good support:


>  - access to file attachments (lower priority)

Surprisingly, yes.

> for presentations:
>  - presentation mode (full screen, no visible controls, on one 
>    monitor/beamer of choice)


>  - JS for controlling optional content groups (OCGs, Viewer Layers)

You can toggle all the layers in the side panel. I don't think that you
can toggle via buttons or JS though.

>  - inner- and inter-document links must work

Yes; however, inter-document links are sometimes limited depending for
security reasons. I'm sure that this can be configured though.

>  - multimedia support at least via links (suggestion: use “plain Rich
>    Media” approach with OS’ default player)

I don't think so, although I guess you could include a video file as an

>  - transition effects not necessary (but if the developer has fun
>    including them, go on)

No transition effects.

> for forms:
>  - fill in


>  - print documents with/without form contents


>  - same-ID fields on different pages must be synchronized

No idea.

>  - custom checkmarks/radiobuttons should work & display correctly

Usually it works, sometimes it doesn't. 

>  - JS for calculations

Usually it works, sometimes it doesn't. 

> for annotations (correction workflow; generally just nice to have):
>  - similar to Adobe/Foxit Reader

Reading annotations works, but you can't modify anything.

> for development/debugging:
>  - show metadata (incl. XMP), e.g. in a sidebar or dialog

You can see all the "regular" metadata, but XMP doesn't work.

>  - show fonts metadata (inclusion etc.)


>  - show PDF Boxes (MediaBox, CropBox, TrimBox, BleedBox, ArtBox) as
>    colored frames, switchable via preferences and menu (bar) item


>  - check for PDF/A and PDF/X compliance would be nice (integrate
>    VeraPDF?)

>  - FOSS license

Yes. (Apache 2.0)

>  - should at least work on Windows, MacOS (preferably 10.14+), Linux
>    and *BSD; iOS & Android versions would be nice

It's built in to Firefox, so it works on Windows, macOS, Linux, and the
BSDs. It should also work on mobile, although support is a little
spottier there.

>  - how about (long term) support?

It should be supported as long as Firefox exists.

>  - Funding

Overleaf uses pdf.js as its default PDF viewer, so they may perhaps be
willing to help.


I've been using pdf.js almost exclusively for the past few years either
via Firefox or VS Code, and I've never really had any problems. The only
real issue that I've had is that it gets fairly slow with documents over
a few thousand pages long. Otherwise, it seems pretty fast and stable,
and it supports nearly every feature that I tend to need.

Since it's written in JavaScript, it should be fairly easy to modify,
and it should run on nearly everything.

-- Max

More information about the ntg-context mailing list