Poppler

PDF rendering library and command-line suite — a fork of Xpdf that's become the de facto standard PDF engine underlying much of the open-source PDF ecosystem, powering tools like Evince, Okular, and countless downstream wrappers. Ships pdftotext, pdfimages, pdftoppm, pdftocairo, pdftohtml, pdftops, pdfinfo, pdffonts, pdfdetach, pdfattach, pdfseparate, pdfunite, and pdfsig, covering text/image extraction, page rendering, format conversion, metadata, attachments, and signature verification.

Sample Results

Real output from running this tool against a sample PDF, as part of PDFog's open-source PDF tooling benchmark.

Input: sample-brochure.pdf

Loading PDF…

pdfinfo

pdfinfo "sample-brochure.pdf" >"sample-brochure--poppler-cpp--pdfinfo.txt"

Output: sample-brochure--poppler-cpp--pdfinfo.txt

Title:           Real Estate Example Page
Producer:        Prince 8.1 (www.princexml.com)
Custom Metadata: no
Metadata Stream: no
Tagged:          no
UserProperties:  no
Suspects:        no
Form:            none
JavaScript:      no
Pages:           1
Encrypted:       no
Page size:       595 x 842 pts (A4)
Page rot:        0
File size:       309412 bytes
Optimized:       no
PDF version:     1.4

pdftotext

pdftotext -layout -eol unix "sample-brochure.pdf" "sample-brochure--poppler-cpp--pdftotext.txt"

Output: sample-brochure--poppler-cpp--pdftotext.txt

221 Queen Street, Melbourne VIC 3000
apartment       2      1       1                                                                               $1,000,000


                                                                                                          Prince Cascading
                                                                                                             1234-5678




                                                                                          Additional Information
                                                                                          Land Size             1171m2
                                                                                          House Size            -
                                                                                          Map Ref.              -
                                                                                          Energy Rating         -
                                                                                          Council Rates         -
                                                                                          Water Rates           -




WARM BEAUTIFUL APARTMENT

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc turpis ante, fermentum ac
cursus vitae, tempus vel ipsum. Proin justo lorem, mattis sed pharetra ac, vehicula
tincidunt sem. Mauris est leo, scelerisque at gravida vel, interdum quis felis. Nullam
nibh magna, consectetur eu aliquet ac, sollicitudin eget nisl. Praesent nibh tellus,
elementum ut scelerisque a, pretium eget libero. Morbi sodales tincidunt turpis et
sagittis. Aenean sed dictum nisi.

Phasellus quis metus lectus. Donec varius pellentesque purus, et ornare enim
pellentesque sed. Morbi quam augue, pulvinar sit amet mollis in, euismod porta orci.
Quisque rutrum egestas enim ac viverra. Mauris blandit tristique feugiat. Ut molestie
molestie turpis sed elementum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Maecenas in nunc odio. Nunc sagittis, mi ut ornare pellentesque, orci augue dapibus
est, vel rutrum elit orci vel augue.


-raw: keep strings in content-stream order instead of reading order — useful comparison point against -layout's reconstructed reading order.

pdftotext -raw -eol unix "sample-brochure.pdf" "sample-brochure--poppler-cpp--pdftotext--raw.txt"

Output: sample-brochure--poppler-cpp--pdftotext--raw.txt

$1,000,000
221 Queen Street, Melbourne VIC 3000
apartment 2 1 1
Prince Cascading
1234-5678
Additional Information
Land Size
House Size
Map Ref.
Energy Rating
Council Rates
Water Rates
1171m2
-
-
-
-
-
WARM BEAUTIFUL APARTMENT
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc turpis ante, fermentum ac
cursus vitae, tempus vel ipsum. Proin justo lorem, mattis sed pharetra ac, vehicula
tincidunt sem. Mauris est leo, scelerisque at gravida vel, interdum quis felis. Nullam
nibh magna, consectetur eu aliquet ac, sollicitudin eget nisl. Praesent nibh tellus,
elementum ut scelerisque a, pretium eget libero. Morbi sodales tincidunt turpis et
sagittis. Aenean sed dictum nisi.
Phasellus quis metus lectus. Donec varius pellentesque purus, et ornare enim
pellentesque sed. Morbi quam augue, pulvinar sit amet mollis in, euismod porta orci.
Quisque rutrum egestas enim ac viverra. Mauris blandit tristique feugiat. Ut molestie
molestie turpis sed elementum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Maecenas in nunc odio. Nunc sagittis, mi ut ornare pellentesque, orci augue dapibus
est, vel rutrum elit orci vel augue.


-i (ignore images) is required even with -stdout: pdftohtml still extracts embedded images to `<input-basename>-<page>_<n>.png` files written next to the INPUT PDF (not to our output path — images can't go to stdout) unless told not to. Confirmed the hard way: this wrote stray PNGs into pdf-inputs/ on PDFs with embedded images before -i was added.

pdftohtml -xml -i -stdout "sample-brochure.pdf" >"sample-brochure--poppler-cpp--pdftohtml.xml"