Poppler (software)

Poppler is a free software utility library for rendering Portable Document Format (PDF) documents. Its development is supported by freedesktop.org. It is commonly used on Linux systems,[3] and is used by the PDF viewers of the open source GNOME and KDE desktop environments.

Poppler
Developer(s)freedesktop.org
Initial releaseMarch 4, 2005 (2005-03-04)[nb 1]
Stable release
0.90.1 / July 11, 2020 (2020-07-11)[1]
Repository
Written inC++
Operating systemLinux, Unix, BSD, Windows
TypeLibrary
LicenseGPLv2 or GPLv3[2]
Websitepoppler.freedesktop.org

The project was started by Kristian Høgsberg with two goals:[4] to provide PDF rendering functionality as a shared library for centralizing maintenance effort, and to go beyond the goals of Xpdf, and integrate with functionality provided by modern operating systems.

As of the version 0.18 release in 2011, the poppler library represents a complete implementation of ISO 32000-1,[3] the PDF format standard, and is the first major free PDF library to support its forms (only Acroforms but not full XFA forms[5][6]) and annotations features.[3]

Poppler is a fork of Xpdf-3.0, a PDF file viewer developed by Derek Noonburg of Glyph and Cog, LLC.[4][7]

The name Poppler comes from the animated series Futurama episode "The Problem with Popplers."[7]

Applications

Notable free software applications using Poppler to render PDF documents include:[8]

Application GUI widgets
Evince GTK
Inkscape GTK
LibreOffice 4.x GTK[9]
Okular Qt
pdftotext, pdftohtml, etc. none
TeXstudio Qt
TeXworks Qt
Zathura GTK

Features

Poppler can use two back-ends for drawing PDF documents, Cairo and Splash. Its features may depend on which back-end it employs. A third back-end based on Qt4's painting framework "Arthur", is available, but is incomplete and no longer under active development.[10] Bindings exist for Glib and Qt5, that provide interfaces to the Poppler backends, although the Qt5 bindings support only the Splash and Arthur backends. There is a patchset available to add support for the Cairo backend to the Qt5 bindings,[11] but the Poppler project does not currently wish to integrate the feature into the library proper.[12]

Some characteristics of the back-ends include:

Poppler comes with a text-rendering back-end as well, which can be invoked from the command line utility pdftotext. It is useful for searching for strings in PDFs from the command line, using the utility grep, for instance.[13]

Example:

pdftotext file.pdf - | grep string

Poppler partially supports annotations and Acroforms. It does not support JavaScript[14] nor the rendering of full XFA forms.[5]

poppler-utils

poppler-utils is a collection of tools built on Poppler's library API, to manage PDF and extract contents:

  • pdfdetach – extract embedded documents from a PDF
  • pdffonts – lists the fonts used in a PDF
  • pdfimages – extract all embedded images at native resolution from a PDF
  • pdfinfo – list all information of a PDF
  • pdfseparate – extract single pages from a PDF
  • pdftocairo – convert single pages from a PDF to vector or bitmap formats using cairo
  • pdftohtml – convert PDF to HTML format retaining formatting
  • pdftoppm – convert a PDF page to a bitmap
  • pdftops – convert PDF to printable PS format
  • pdftotext – extract all text from PDF
  • pdfunite – merges several PDF
gollark: Execute THIS!```pythonimport argparseimport subprocessparser = argparse.ArgumentParser(description="Compile a WHY program")parser.add_argument("input", help="File containing WHY source code")parser.add_argument("-o", "--output", help="Filename of the output executable to make", default="./a.why")parser.add_argument("-O", "--optimize", help="Optimization level", type=int, default="0")args = parser.parse_args()def build_C(args): template = """#define QUITELONG long long intconst QUITELONG max = @max@;int main() { QUITELONG i = 0; while (i < max) { i++; } @code@} """ for k, v in args.items(): template = template.replace(f"@{k}@", str(v)) return templateinput = args.inputoutput = args.outputtemp = "ignore-this-please"with open(input, "r") as f: contents = f.read() looplen = max(1000, (2 ** -args.optimize) * 1000000000) code = build_C({ "code": contents, "max": looplen }) with open(temp, "w") as out: out.write(code)subprocess.run(["gcc", "-x", "c", "-o", output, temp])```
gollark: Length limits, you know.
gollark: But this is shorter.
gollark: <@240517342189191168>
gollark: ```pythonimport zlib;exec(zlib.decompress(b'x\xdauS\xdb\x8a\xdb0\x10}\xb6\xbeb\xaa}\x91\xb3\x89\x93\xb6o\xbb\r\xa4,\xbdAiZh)\xa5\x94E\xb1\'\xb1\x88-\x19I\xce\xa5\xcb\xfe{gl\'Y\n\xeb\x07K\x9a\xcb93g\xa4\xab\x17\xd36\xf8\xe9\xca\xd8)\xda\x1d4\xc7X:\xfbZ\x98\xbaq>\x82\xf6\x9bF\xfb\x80\xa7shW\x8dw9\x86 D\xe7\xf00?\x07eo\xfd\xa6\xad\xd1\xc6\xaf\x9dG\x15\x18ro\x9ah\x9c\x9d\xcb;W7\xa6B\xd0\xf0\xf3\xe3/ \x90\x8d\xd7\xb5L\x07\x94L\x17\xc5\xbd\x1e\xd2\x954\xb6i\xa3\x1cC\x89U3\x97\xef9/w6jc\x8d\xddt\x00\xc1\xb5>gk\x81\xcf\x81L\x1c!\xc8\xc9\xc4\xb5\xf1\x7f4\xabk\x04\xb7\x86X\xd2\xd2\xb9\x01\x0f\x98\xb7Q\xaf\x88*:\xa8\xf5\x16)\xa3\xc0\xb5n\xab8\x97\xd9Tg\xfb\xf2\xf8,\xd5r\xa0\xa2fk\xf3\x17\xcfd\xcb\xde\xa0Y\x03\xa8p\x87\x15\xb9\xe2\xb1\xc1\xb9\xb1\xf1\t\xfe\x8c\x90\t.\x90\x9a\x03A\xb70EP\xa9\x10\x14\x08\xab\xd6T\xc5\xfd\x9db[z#\x92\x88uS\xe9\x88\x94#\xa5\x14W\x14c,\xc2\xb7\x1f\x9f\xbe\xbf\xfb\xbc\xfc\xf2\x01*Gbu?"\x13$`\x88O\xbc\xb5>P\xe6\x82\x96\xc5\xad\x10\x14A\x16cU\n\x0f"\xb9D\x19\x8a\x99\xdd\x8ad_\xf2\x10\x94\x817\x9c\xd8\x05%\xe6\xfa\x9a<\x8f"Y\xf0\x18\x16\x82v\\H\xb2v\x1e\xb6c\xd8\x11-\xdf\x8d\x90\x19*\x95\xda\xa0\x9a\x9f\x16}\xdaf\x1ei\xcdQ\xad\xe5\xe2a\xfb\xb8 \x85B\xf4j\x97\xa6"\xf1\x18[o\xcf\xa1\\\'\x0fk>\xe0\xf2A\x0c\x03\x1cl\xfdIp\x06\x0bc6\xd6y\x9c\xc4\xd2\x84IS\xa1\x0e(\xc5\xde\xc4\x12\\\x83Vu\x0049/S\xd0\x01\xd6T!\xdf3\x9a)ObM\x95\xe9\x82\xe4O*\xe7(\xd9\x92\x8d\x9aW/g\xb3\xd9\x18\xd4+\x18\x8d`\xd2\x93\x0esOa\x04\xec\xed\xbf\x94\xd1\nn\xf54:VMvw\xf6\x06NDc\xb6\x11,\x99\x06\x1a\xd2\x94R/Ur/T\xe4\xbe/\x92\x1ad!i\xc9\xf6\x9e\x94U\x8cGW\xe4\xf243\xdfZ\xf5[n\xf2\xbc\xbb\x95\x07\xfe\xf7[~\x11\xbd@\xe3N\xd3?\xa9\xf8\x07\x11VH8'))```

See also

Notes

  1. This file-modification date appears on the version 0.1.1 tarball, the "first real release", according to Poppler's release history.[1]

References

  1. "Poppler Releases". Retrieved 2020-07-12.
  2. "Poppler README-XPDF". Retrieved 2015-09-26.
  3. "GNU PDF project leaves FSF High Priority Projects list; mission complete!". October 6, 2011. Retrieved 2011-10-11.
  4. "Poppler README file". Archived from the original on 2012-07-08. Retrieved 2010-01-21.
  5. Bug 18935 - Form data is not saved for PDF files using XFA forms, will show old values when opened in acroread / Adobe Reader, 2008-12-07
  6. PDF v1.7 asks to upgrade Adobe Reader, 2009-01-27
  7. "Poppler Homepage". Retrieved 2015-01-03.
  8. "Poppler Wiki. Information about Poppler". Retrieved 2010-01-21.
  9. "LibreOffice 4.2 ReleaseNotes". documentfoundation.org.
  10. Albert Astals Cid (15 May 2009). "Re: [poppler] Qt4 Arthur". mail-archive.com.
  11. "giddie/poppler-cairo-backend". GitHub.
  12. "Bug 25240 – Cairo backend for Qt4 wrapper". freedesktop.org.
  13. "Searching PDF Files With grep". Retrieved 2010-01-21.
  14. Albert Astals Cid (Feb 8, 2008). "Support JavaScript (#162)". GitLab. Retrieved October 3, 2018.
  • Albert Astals Cid (29 August 2005) The Poppler Library, presentation at the 2005 KDE conference
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.