Difference between revisions of "PDF, PS and DjVu"

From ArchWiki
Jump to: navigation, search
(Command-line tools: add #Create a PDF from images)
(Viewers: flag for accuracy)
(One intermediate revision by the same user not shown)
Line 19: Line 19:
 
{{Note|Some [[web browser]]s can display PDF files, for example with [[Browser plugins#PDF.js|PDF.js]].}}
 
{{Note|Some [[web browser]]s can display PDF files, for example with [[Browser plugins#PDF.js|PDF.js]].}}
  
{| class="wikitable sortable"
+
{{Accuracy|Filling out PDF forms seem to be broken in MuPDF and llpp.}}
 +
 
 +
{| class="wikitable sortable" style="text-align:center;"
 
! Name !! Package !! PDF !! PostScript !! DjVu !! PDF forms !! License !! Note
 
! Name !! Package !! PDF !! PostScript !! DjVu !! PDF forms !! License !! Note
 
|-
 
|-
| [https://naihe2010.github.io/apvlv/ apvlv] || {{AUR|apvlv}} || {{G|Poppler}} || {{No}} || {{G|DjVuLibre}} || {{No}} || {{B|GPLv2}} || Has [[Vim]] keybindings, supports UMD and TXT files.
+
| [https://naihe2010.github.io/apvlv/ apvlv] || {{AUR|apvlv}} || Poppler || {{Na}} || DjVuLibre || {{Na}} || {{B|GPLv2}} || {{L|Has [[Vim]] keybindings, supports UMD and TXT files.}}
 
|-
 
|-
| [https://github.com/mate-desktop/atril Atril] || {{Pkg|atril}} || {{G|Poppler}} || {{G|libspectre}} || {{G|DjVuLibre}} || {{Yes}} || {{B|GPLv2}} || Fork of Evince, part of [[MATE]], supports DVI, EPS, EPUB, TIFF, XPS and Comicbook.
+
| [https://github.com/mate-desktop/atril Atril] || {{Pkg|atril}} || Poppler || libspectre || DjVuLibre || {{Ya}} || {{B|GPLv2}} || {{L|Fork of Evince, part of [[MATE]], supports DVI, EPS, EPUB, TIFF, XPS and Comicbook.}}
 
|-
 
|-
| [http://djvu.sourceforge.net/djview4.html DjView] || {{Pkg|djview}} || {{No}} || {{No}} || {{G|DjVuLibre}} || {{No}} || {{B|GPLv2}} || By the developers of DjVuLibre.
+
| [http://djvu.sourceforge.net/djview4.html DjView] || {{Pkg|djview}} || {{Na}} || {{Na}} || DjVuLibre || {{Ya}} || {{B|GPLv2}} || {{L|By the developers of DjVuLibre.}}
 
|-
 
|-
| [[Emacs]] || {{Pkg|emacs}} || colspan=2 {{G|Ghostscript*}} || {{G|DjVuLibre*}} || {{No}} || {{B|GPLv3}} || See also [https://github.com/politza/pdf-tools pdf-tools] for improved pdf support and the [https://elpa.gnu.org/packages/djvu.html djvu package] for djvu support.
+
| [[Emacs]] || {{Pkg|emacs}} || colspan=2 |Ghostscript* || DjVuLibre*  || {{Na}} || {{B|GPLv3}} || {{L|See also [https://github.com/politza/pdf-tools pdf-tools] for improved pdf support and the [https://elpa.gnu.org/packages/djvu.html djvu package] for djvu support.}}
 
|-
 
|-
| [[Wikipedia:Evince|Evince]] || {{Pkg|evince}} || {{G|Poppler}} || {{G|libspectre}} || {{G|DjVuLibre}} || {{Yes}} || {{B|GPLv2}} || Part of [[GNOME]], supports DVI, EPS, TIFF, XPS and Comicbook.
+
| [[Wikipedia:Evince|Evince]] || {{Pkg|evince}} || Poppler || libspectre || DjVuLibre || {{Ya}} || {{B|GPLv2}} || {{L|Part of [[GNOME]], supports DVI, EPS, TIFF, XPS and Comicbook.}}
 
|-
 
|-
| [[Wikipedia:Foxit Reader|Foxit Reader]] || {{AUR|foxitreader}} || {{G|custom}} || {{No}} || {{No}} || {{Yes}} || {{V|proprietary}} || Small and fast (compared to Acrobat) proprietary PDF viewer.
+
| [[Wikipedia:Foxit Reader|Foxit Reader]] || {{AUR|foxitreader}} || custom || {{Na}} || {{Na}} || {{Ya}} || {{V|proprietary}} || {{L|Small and fast (compared to Acrobat) proprietary PDF viewer.}}
 
|-
 
|-
| [https://www.gnu.org/software/gv/ gv] || {{Pkg|gv}} || colspan=2 {{G|Ghostscript}} || {{No}}  || {{No}} || {{B|GPLv3}} || Graphical user interface for the Ghostscript interpreter.
+
| [https://www.gnu.org/software/gv/ gv] || {{Pkg|gv}} || colspan=2 |Ghostscript || {{Na}}  || {{Na}} || {{B|GPLv3}} || {{L|Graphical user interface for the Ghostscript interpreter.}}
 
|-
 
|-
| [[llpp]] || {{Pkg|llpp}} || {{G|libmupdf}} || {{No}} || {{No}} || {{Yes}} || {{B|GPLv3}} || Based on MuPDF, supports continuous page scrolling and bookmarking.
+
| [[llpp]] || {{Pkg|llpp}} || libmupdf || {{Na}} || {{Na}} || {{Ya}} || {{B|GPLv3}} || {{L|Based on MuPDF, supports continuous page scrolling and bookmarking.}}
 
|-
 
|-
| [[MuPDF]] || {{Pkg|mupdf}} || {{G|custom}} || {{No}} || {{No}} || {{Yes}} || {{B|AGPLv3}} || Supports EPUB, FictionBook, XPS, Comicbook and CJK.
+
| [[MuPDF]] || {{Pkg|mupdf}} || custom || {{Na}} || {{Na}} || {{Ya}} || {{B|AGPLv3}} || {{L|Supports EPUB, FictionBook, XPS, Comicbook and CJK.}}
 
|-
 
|-
| [[Wikipedia:Okular|Okular]] || {{Pkg|okular}} || {{G|Poppler}} || {{G|libspectre}} || {{G|DjVuLibre}} || {{Yes}} || {{B|GPL, LGPL}} || Part of [[KDE]], supports CHM, Comicbook, DVI, EPUB, FictionBook, Mobipocket, ODT, Plucker, TIFF and XPS.
+
| [[Wikipedia:Okular|Okular]] || {{Pkg|okular}} || Poppler || libspectre || DjVuLibre || {{Ya}} || {{B|GPL, LGPL}} || {{L|Part of [[KDE]], supports CHM, Comicbook, DVI, EPUB, FictionBook, Mobipocket, ODT, Plucker, TIFF and XPS.}}
 
|-
 
|-
| [https://pdfpc.github.io/ pdfpc] || {{Pkg|pdfpc}} || {{G|Poppler}} || {{No}} || {{No}} || {{No}} || {{B|GPLv2}} || Presenter console with multi-monitor support for PDF files.
+
| [https://pdfpc.github.io/ pdfpc] || {{Pkg|pdfpc}} || Poppler || {{Na}} || {{Na}} || {{Na}} || {{B|GPLv2}} || {{L|Presenter console with multi-monitor support for PDF files.}}
 
|-
 
|-
| [https://launchpad.net/qpdfview qpdfview] || {{Pkg|qpdfview}} || {{G|Poppler}} || {{G|libspectre*}} || {{G|DjVuLibre*}} || {{Yes}} || {{B|GPLv2}} || Tabbed Qt interface, supports CUPS printing.
+
| [https://launchpad.net/qpdfview qpdfview] || {{Pkg|qpdfview}} || Poppler || libspectre* || DjVuLibre* || {{Ya}} || {{B|GPLv2}} || {{L|Tabbed Qt interface, supports CUPS printing.}}
 
|-
 
|-
| [[Wikipedia:Xpdf|Xpdf]] || {{Pkg|xpdf}} || {{G|custom}} || {{No}} || {{No}} || {{No}} || {{B|GPLv3}} || Can decode LZW and read encrypted PDFs.
+
| [[Wikipedia:Xpdf|Xpdf]] || {{Pkg|xpdf}} || custom || {{Na}} || {{Na}} || {{Na}} || {{B|GPLv3}} || {{L|Can decode LZW and read encrypted PDFs.}}
 
|-
 
|-
| [https://github.com/linuxmint/xreader/ Xreader] || {{Pkg|xreader}} || {{G|Poppler}} || {{G|libspectre*}} || {{G|DjVuLibre*}} || {{Yes}} || {{B|GPLv2}} || Fork of Evince, developed by Linux Mint, supports DVI, EPUB, TIFF, XPS and Comicbook.
+
| [https://github.com/linuxmint/xreader/ Xreader] || {{Pkg|xreader}} || Poppler || libspectre* || DjVuLibre* || {{Ya}} || {{B|GPLv2}} || {{L|Fork of Evince, developed by Linux Mint, supports DVI, EPUB, TIFF, XPS and Comicbook.}}
 
|-
 
|-
| [[Zathura]] || {{Pkg|zathura}} || {{G|Poppler* / libmupdf*}} || {{G|libspectre*}} || {{G|DjVuLibre*}} || {{Yes}} || {{B|zlib}} || Customizable with plugins, functional, supports Comicbook.
+
| [[Zathura]] || {{Pkg|zathura}} || Poppler* / libmupdf* || libspectre* || DjVuLibre* || {{Ya}} || {{B|zlib}} || {{L|Customizable with plugins, functional, supports Comicbook.}}
 
|}
 
|}
  

Revision as of 20:21, 3 December 2018

This article covers software to view, edit and convert PDF, PostScript (PS) and DjVu (déjà vu) files.

Engines

Poppler (poppler) is a PDF rendering library based on Xpdf. For CJK (Chinese, Japanese, Korean) support with Poppler, install poppler-data.

libspectre (libspectre) is a small library for rendering Postscript documents.

Ghostscript (ghostscript) is an interpreter for PostScript and PDF.

DjVuLibre (djvulibre) is a suite to create, manipulate and view DjVu documents.

Viewers

Note: Some web browsers can display PDF files, for example with PDF.js.

Tango-inaccurate.pngThe factual accuracy of this article or section is disputed.Tango-inaccurate.png

Reason: Filling out PDF forms seem to be broken in MuPDF and llpp. (Discuss in Talk:PDF, PS and DjVu#)
Name Package PDF PostScript DjVu PDF forms License Note
apvlv apvlvAUR Poppler DjVuLibre GPLv2 Has Vim keybindings, supports UMD and TXT files.
Atril atril Poppler libspectre DjVuLibre GPLv2 Fork of Evince, part of MATE, supports DVI, EPS, EPUB, TIFF, XPS and Comicbook.
DjView djview DjVuLibre GPLv2 By the developers of DjVuLibre.
Emacs emacs Ghostscript* DjVuLibre* GPLv3 See also pdf-tools for improved pdf support and the djvu package for djvu support.
Evince evince Poppler libspectre DjVuLibre GPLv2 Part of GNOME, supports DVI, EPS, TIFF, XPS and Comicbook.
Foxit Reader foxitreaderAUR custom proprietary Small and fast (compared to Acrobat) proprietary PDF viewer.
gv gv Ghostscript GPLv3 Graphical user interface for the Ghostscript interpreter.
llpp llpp libmupdf GPLv3 Based on MuPDF, supports continuous page scrolling and bookmarking.
MuPDF mupdf custom AGPLv3 Supports EPUB, FictionBook, XPS, Comicbook and CJK.
Okular okular Poppler libspectre DjVuLibre GPL, LGPL Part of KDE, supports CHM, Comicbook, DVI, EPUB, FictionBook, Mobipocket, ODT, Plucker, TIFF and XPS.
pdfpc pdfpc Poppler GPLv2 Presenter console with multi-monitor support for PDF files.
qpdfview qpdfview Poppler libspectre* DjVuLibre* GPLv2 Tabbed Qt interface, supports CUPS printing.
Xpdf xpdf custom GPLv3 Can decode LZW and read encrypted PDFs.
Xreader xreader Poppler libspectre* DjVuLibre* GPLv2 Fork of Evince, developed by Linux Mint, supports DVI, EPUB, TIFF, XPS and Comicbook.
Zathura zathura Poppler* / libmupdf* libspectre* DjVuLibre* zlib Customizable with plugins, functional, supports Comicbook.
(* means optional)

PDF forms

The PDF forms column in the above table refers to AcroForms support. If you do not need your input to be directly extractable from the PDF, you can also use the applications in #Annotation or #Graphical PDF editing to put text on top of a PDF. PDF forms can be created with LibreOffice Writer (View > Toolbars > Form Controls) and the advanced PDF editors.

The proprietary and deprecated XFA format for forms, is not fully support by Poppler[1][2] and only supported by Adobe Reader and Master PDF Editor.

Discontinued

  • Adobe Reader — Discontinued proprietary PDF file viewer by Adobe, supports both AcroForms and XFA forms.
https://www.adobe.com/products/reader.html || acroreadAUR
  • ePDFView — Lightweight PDF document viewer using the Poppler and GTK+ libraries. Development stopped.
http://freecode.com/projects/epdfview || epdfview

Framebuffer

  • fbgs — Poor man's PostScript/pdf viewer for the linux framebuffer console.
https://www.kraxel.org/blog/linux/fbida/ || fbida
  • fbpdf — Small framebuffer PDF and DjVu viewer based off of MuPDF, with Vim keybindings and written in C
http://repo.or.cz/w/fbpdf.git || fbpdf-gitAUR
  • JFBView — Framebuffer PDF and image viewer. Features include Vim-like controls, zoom-to-fit, a TOC (outline) view, fast multi-threaded rendering and asynchronous pre-caching. Originally a fork of fbpdf called jfbpdf, now completely rewritten.
https://seasonofcode.com/pages/jfbview.html || jfbviewAUR

Annotation

  • flpsed — A PostScript and PDF annotator, only supports text boxes.
http://flpsed.org/flpsed.html || flpsedAUR

See also List of applications/Documents#Stylus note-taking.

Graphical PDF editing

  • Scribus can import and export PDF; text is imported as polygons.[3]
  • LibreOffice Draw can import and export PDF; text is imported as text; embedded fonts are substituted.[4][5]
  • Inkscape can import a single page from a PDF and export to PDF; text is imported as cloned glyphs or text; with the latter embedded fonts are substituted.
  • Graphics editors like GIMP and krita can also import and export PDFs at the cost of rasterization.

Simple editors

  • PDF Chain — GTK front-end for PDFtk, written in C++, supporting concatenation, burst, watermarks, attaching files and more.
http://pdfchain.sourceforge.net/ || pdfchainAUR
  • PDF Mix Tool — Qt front-end for PoDoFo, written in C++, supports splitting, merging, rotating and mixing PDF files.
https://scarpetta.eu/pdfmixtool/ || pdfmixtoolAUR
  • PDF Mod — Reorder, rotate, and remove pages, export images from a document, edit the title, subject, author, and keywords, and combine documents via drag and drop.
https://wiki.gnome.org/Apps/PdfMod || pdfmod
  • PDF-Shuffler — GTK2 front-end for pyPdf, written in Python, supports concatenation, splitting, rotation and reordering.
https://sourceforge.net/projects/pdfshuffler/ || pdfshuffler

Advanced editors

  • Master PDF Editor — Functional proprietary PDF editor. Free for non-commercial use.
https://code-industry.net/free-pdf-editor/ || masterpdfeditorAUR, masterpdfeditor-qt4AUR for older version without restrictions
  • PDFsam — Open source application, written in Java, supports merging, splitting, rotating and some premium features.
https://pdfsam.org/ || pdfsam
  • PDF Studio — All-in-one proprietary PDF editor similar to Adobe Acrobat.
https://www.qoppa.com/pdfstudio/ || pdfstudioAUR

Command-line tools

  • PDFtk — Simple tool for doing everyday things with PDF documents
http://www.pdfhacks.com/pdftk || pdftkAUR, pdftk-binAUR
  • Stapler — Light alternative to PDFtk using the PyPDF2 library.
https://github.com/hellerbarde/stapler || staplerAUR, stapler-gitAUR
  • QPDF — Content-preserving PDF transformation system.
https://github.com/qpdf/qpdf || qpdf
  • pdfgrep — Commandline utility to search text in PDF files.
https://pdfgrep.org/ || pdfgrep
  • pdf2svg — Convert PDF files to SVG files.
http://www.cityinthesky.co.uk/opensource/pdf2svg/ || pdf2svg
  • mupdf-tools — Tools developed as part of MuPDF, contains mutool(1) and muraster.
https://mupdf.com || mupdf-tools
  • gs(1) from Ghostscript, see also /usr/share/doc/ghostscript/*/Use.htm (online). Ghostscript also provides many wrapper scripts like ps2pdf and pdf2ps.

DjVu tools

  • DjVuLibre provides many command-line tools, like ddjvu(1) for example.
  • pdf2djvu — Creates DjVu files from PDF files.
https://jwilk.net/software/pdf2djvu || pdf2djvu
  • img2djvu — Single-pass DjVu encoder based on DjVu Libre and ImageMagick
https://github.com/ashipunov/img2djvu || img2djvu-gitAUR

Create a PDF from images

With GraphicsMagick:

$ gm convert one.jpg two.jpg three.jpg out.pdf

Inspecting metadata

With Poppler:

$ pdfinfo file.pdf

With ExifTool:

$ exiftool file.pdf

Optimize a PDF

With Ghostscript:

$ ps2pdf -dPDFSETTINGS=/screen in.pdf out.pdf

For different settings see the documentation.

There is also shrinkpdfAUR, a third-party wrapper script.

Encrypt a PDF

The user password is used for encryption, the owner password to restrict operations once the document is decrypted, for more information, see Wikipedia:PDF#Security and signatures.

With PDFtk:

$ pdftk in.pdf output out.pdf user_pw password

With PoDoFo:

$ podofoencrypt -u user_password -o owner_password in.pdf out.pdf

With QPDF:

$ qpdf --encrypt user_password owner_password key_length -- in.pdf out.pdf

where key_length can be 40, 128 or 256.

Decrypt a PDF

This section lists commands to decrypt a PDF to an unencrypted file. Note that most PDF viewers also support encrypted PDFs.

With PDFtk:

$ pdftk in.pdf input_pw password output out.pdf

With QPDF:

$ qpdf --decrypt --password=password in.pdf out.pdf

With Poppler to PostScript:

$ pdftops -upw password in.pdf out.ps
Tip: Forgotten passwords might be recovered with pdfcrack, see pdfcrack(1).

Concatenate PDFs

With PDFtk:

$ pdftk one.pdf two.pdf three.pdf cat output out.pdf

With Poppler:

$ pdfunite one.pdf two.pdf three.pdf out.pdf

With QPDF:

$ qpdf --empty --pages one.pdf two.pdf three.pdf -- out.pdf

Extract page range from PDF

With PDFtk as a single file:

$ pdftk infile.pdf cat first-last output outfile.pdf

With Poppler as separate files:

$ pdfseparate -f first -l last infile.pdf outfileroot-%d.pdf

With QPDF as a single file:

$ qpdf --empty --pages infile.pdf first-last -- outfile.pdf

Rasterize a PDF

With GraphicsMagick to convert a specific page:

$ gm convert -density dpi infile.pdf[page] outfile.jpg

With Poppler to convert all pages:

$ pdftoppm -jpeg -r dpi in.pdf infile.pdf outfileroot

With Poppler to convert a specific page:

$ pdftoppm -jpeg -r dpi in.pdf -f page -singlefile infile.pdf outfileroot

Libraries

  • libharu — C library for generating PDF documents.
https://github.com/libharu/libharu || libharu, Lua binding: lua-hpdfAUR
  • PoDoFo — A C++ library to work with the PDF file format.
http://podofo.sourceforge.net || podofo

Python

  • pdfrw — A pure Python library that reads and writes PDFs.
https://github.com/pmaupin/pdfrw || python-pdfrw, python2-pdfrw
  • pyPdf — Discontinued predecessor of PyPDF2.
http://pybrary.net/pyPdf || python2-pypdf
  • PyPDF2 — A pure-Python library built as a PDF toolkit.
https://mstamy2.github.com/PyPDF2 || python-pypdf2AUR, python2-pypdf2AUR
  • PyX — Python library for the creation of PostScript and PDF files.
http://pyx.sourceforge.net || python-pyx, python2-pyx
  • ReportLab — A proven industry-strength PDF generating solution
https://bitbucket.org/rptlab/reportlab || python-reportlab, python2-reportlab

See also