Docs: PDF feature checklist
Download PDF Changelog

PDF feature checklist

Changed in 1.19.0: Creating content.

What the PDF format and other PDF libraries offer, and whether PdfPecker does it. Of the 133 features below, PdfPecker supports 82, supports 17 in part and leaves out 34. Some of those are left out on purpose, such as JavaScript in PDFs and the old RC4 encryption. The limitations page has the details of what is missing in HTML and CSS.

File format and structure

The PDF file itself: versions, cross-reference tables, pages and their boxes.

Feature PdfPecker Notes
Write PDF 1.4 and 1.7 ✓ Yes 1.4 for plain output, 1.7 when tagged, encrypted or PDF/A.
Write PDF 2.0 ✓ Yes Used for PDF/A-4 and PDF/UA-2 output.
Compressed object streams and xref streams ✓ Yes PdfCompactor packs objects into them; HtmlToPdf writes a classic xref table.
Incremental updates ✓ Yes Signing and long-term validation append to the file, so earlier signatures stay valid.
Linearization (Fast Web View) ✕ No Not written; a viewer must load the whole file before showing page 1.
Open damaged files ✓ Yes Rebuilds a broken cross-reference table from the object headers.
Page sizes, orientation and @page ✓ Yes A4, Letter, Legal, A3, A5, any custom size, landscape, and per-page sizes from CSS @page.
Page rotation ✓ Yes PdfPages.Rotate on existing files; /Rotate is honoured when rendering.
Page boxes (Crop, Bleed, Trim, Art) ½ Partly CropBox is read and kept. Bleed, trim and art boxes are not written, and CSS bleed and marks (crop marks) are ignored.
Very large documents ✓ Yes Streaming merge and MaxPages limits; the readers have resource limits for hostile input.

Creating content Changed in 1.19.0

Ways to produce a new PDF.

Feature PdfPecker Notes
HTML and CSS to PDF ✓ Yes Own parser, CSS engine and layout: flexbox, grid, tables, floats, multi-column, SVG and more.
Markdown to PDF ✓ Yes CommonMark 0.31 and GitHub Flavored Markdown, with footnotes.
Images to PDF ✓ Yes PNG, JPEG, GIF, WebP, BMP and TIFF, one per page.
Fluent C# API ✓ Yes PdfPecker.Fluent, in the style of QuestPDF.
Headers, footers and page numbers ✓ Yes Running bands, @page margin boxes, {page} and {pages} tokens, and a different or no header and footer on the first page.
Table of contents with page numbers ✓ Yes target-counter() and leader() from CSS Paged Media.
Footnotes ✓ Yes CSS float: footnote, and Markdown footnotes at the page bottom.
Scale content to fit a box ✓ Yes -pdfpecker-scale-to-fit: shrink for labels, badges and certificates.
Barcodes and QR codes ✓ Yes QR, EPC payment QR, Code 128 and EAN-13, drawn as vectors.
Content rendered by JavaScript ✕ No By design: no scripts run. Render the HTML on the server first.
Low-level drawing API ✕ No There is no canvas-style API to draw paths and text at coordinates; content comes from HTML, Markdown, images or the fluent API.

Text and fonts

How text is stored, so it looks right and stays searchable.

Feature PdfPecker Notes
Standard 14 fonts ✓ Yes Used by default; EmbedStandardFonts embeds metric-compatible fonts instead.
TrueType and OpenType (CFF) embedding ✓ Yes Subset to the glyphs used.
WOFF and WOFF2 web fonts ✓ Yes Decoded by the library's own WOFF2 decoder.
Variable fonts ✓ Yes Instanced at the weight and width the CSS asks for.
Copyable, searchable Unicode text ✓ Yes ToUnicode maps on every embedded font.
Kerning, ligatures and OpenType features ✓ Yes Numerals, fractions, small capitals, super and subscripts.
Complex scripts ½ Partly Arabic, Hebrew, nine Indic scripts, Thai and Lao are shaped. Khmer, Myanmar, Sinhala, Tibetan and others are not.
Vertical text ½ Partly Drawn as turned horizontal text; CJK characters are not set upright.
Fallback fonts ✓ Yes Bundled fonts for Central European, Greek, Cyrillic and symbols when your fonts lack a character.
Colour fonts and emoji ✕ No COLR/CPAL, SVG and bitmap colour glyphs are not drawn.
Outlined and stroked text ✓ Yes -webkit-text-stroke and paint-order, written as PDF text render modes.

Graphics, images and colour

What can be drawn on a page.

Feature PdfPecker Notes
Vector paths and inline SVG ✓ Yes SVG becomes PDF vector paths, not pictures.
Gradients ✓ Yes Linear, radial and conic gradients as PDF shadings.
Transparency, soft masks and blend modes ✓ Yes Opacity, mask-image, mix-blend-mode, isolation.
Clipping ✓ Yes overflow, border-radius, clip-path.
Tiling patterns ✓ Yes Repeated backgrounds and SVG patterns.
Images: JPEG, PNG, GIF, WebP, BMP, TIFF ✓ Yes JPEG is passed through unchanged; PNG alpha becomes a soft mask.
AVIF images ✕ No Needs an AV1 decoder, which is not planned.
sRGB output intent ✓ Yes Written for PDF/A.
CMYK ½ Partly CMYK JPEGs are embedded (converted to RGB for PDF/A). There is no CSS device-cmyk() colour, so text and shapes are always RGB.
Spot colours (Separation, DeviceN) ✕ No Not written. Read and rendered in existing PDFs.
Overprint control ✕ No Not written, and not simulated when rendering.
Filters and blur ½ Partly CSS filter, backdrop-filter and blurred shadows; blurs are drawn as 144 dpi images, colour filters stay vectors.

What a reader can click or open in a viewer.

Feature PdfPecker Notes
Bookmarks (outlines) ✓ Yes Built from h1 to h6; kept and nested when merging.
Internal links ✓ Yes Links to #ids jump to the right page and position.
External web links ✓ Yes URI link annotations.
Named destinations ½ Partly Read when rendering and converting to HTML. New files use direct page destinations instead of a /Dests name tree.
Page labels (i, ii, iii, A-1) ½ Partly Kept when merging; not written for new documents.
Viewer preferences ½ Partly Display title and right-to-left direction are set. Page mode, page layout and an open action (start page or zoom) are not.
Annotations ½ Partly Links and form widgets are written. Notes, highlights, stamps, free text, ink and shapes cannot be created. Existing ones are rendered and their text extracted.
Layers (optional content) ½ Partly Not created. Existing layers are kept on merge and their visibility is honoured when rendering.
JavaScript in the PDF ✕ No By design: no document or field scripts.
Page transitions and presentation mode ✕ No
Multimedia, 3D and rich media ✕ No Sound, video, 3D models and RichMedia annotations.
PDF portfolios (collections) ✕ No
Article threads ✕ No

Forms (AcroForm)

Fillable fields.

Feature PdfPecker Notes
Create fields from HTML ✓ Yes Text, multi-line, password, checkbox, radio group, drop-down, list box and button.
Read fields of any PDF ✓ Yes Name, type, value, options, flags and page.
Fill fields ✓ Yes With new appearance streams, optionally with your own font.
Flatten fields ✓ Yes Turn the fields into ordinary page content.
Field calculations, formats and validation ✕ No These need JavaScript.
Submit and reset actions ✕ No
XFA forms ✕ No XFA data is removed when filling; the AcroForm fields are filled instead.
Fill in complex scripts ½ Partly Arabic, Hebrew and Indic values are stored but not shaped in the appearance.

Security and encryption

Passwords, permissions and protection.

Feature PdfPecker Notes
AES-256 encryption ✓ Yes Standard security handler revision 6, on new or existing PDFs.
User and owner passwords ✓ Yes
Permissions ✓ Yes Print, high-quality print, copy, modify, annotate, fill forms, assemble, accessibility.
Open encrypted PDFs ✓ Yes RC4 40 to 128 bit, AES-128 and AES-256 (revisions 2 to 6).
Remove a password ✓ Yes PdfProtector.Decrypt.
Write RC4 or AES-128 ✕ No Only the current AES-256 is written, on purpose.
Certificate (public-key) encryption ✕ No The Adobe.PubSec handler is not supported.
Redaction ✕ No No way to remove content under a region.
Sanitising ½ Partly PdfCompactor can drop metadata and application data; there is no full sanitise (scripts, hidden layers).

Digital signatures

Signing and checking signatures.

Feature PdfPecker Notes
PAdES and PKCS#7 detached signatures ✓ Yes ETSI.CAdES.detached and adbe.pkcs7.detached.
RSA, RSA-PSS and ECDSA keys ✓ Yes SHA-256 and other hash algorithms.
Visible signature box ✓ Yes Page, position, size, text and border.
External signers ✓ Yes HSMs, smart cards, PKCS#11 tokens and cloud signing services, also async.
RFC 3161 timestamps ✓ Yes From the timestamp server you name.
Document timestamps ✓ Yes
Long-term validation ✓ Yes DSS and VRI with OCSP and CRL data, PAdES B-LT and B-LTA.
Several signatures ✓ Yes Each signature is an incremental update, so earlier ones stay valid.
Verify signatures ✓ Yes Byte range, digest, signature, timestamp and certificate chain.
Certification signatures (DocMDP) ✕ No Cannot sign as the certifying author with change permissions.
Change analysis ✕ No Verification counts updates after a signature but does not judge whether they were allowed.
Revocation checks during verification ½ Partly Uses the platform's online check; the OCSP and CRL data stored in the PDF is not used.

Standards

ISO and industry profiles.

Feature PdfPecker Notes
PDF/A-1 ✕ No Only PDF/A-2 and later.
PDF/A-2b, 2u, 3b, 3u ✓ Yes Checked with veraPDF in CI.
PDF/A-4 and PDF/A-4f ✓ Yes
PDF/A level a (2a, 3a) ½ Partly Tagging is there (PDF/UA), but the level a conformance itself is not declared.
PDF/A-4e (engineering) ✕ No
Tagged PDF ✓ Yes Structure tree built from the HTML.
PDF/UA-1 and PDF/UA-2 ✓ Yes Accessible PDFs, also combined with PDF/A.
Factur-X and ZUGFeRD ✓ Yes All profiles from Minimum to Extended and XRechnung; embedded and read back.
XRechnung, Peppol BIS 3.0 and OIOUBL XML ✓ Yes Built from invoice data, totals checked against EN 16931.
PDF/X (print production) ✕ No No PDF/X-1a, X-3 or X-4.
PDF/E and PDF/VT ✕ No

Metadata and attachments

Information about the document and files inside it.

Feature PdfPecker Notes
Document properties ✓ Yes Title, author, subject, keywords, creator, producer, dates.
Custom properties ✓ Yes
XMP metadata ✓ Yes
Document language ✓ Yes
Reproducible output ✓ Yes A fixed CreationDate or SOURCE_DATE_EPOCH gives byte-identical files.
Embedded files ✓ Yes Add, list and extract, with MIME type, description and PDF/A-3 relationship.
File attachment annotations ✕ No Files can be attached to the document, not pinned to a spot on a page.
Read document properties ✕ No No public API returns the title, author or XMP of an existing PDF.

Editing existing PDFs

Changing files you already have.

Feature PdfPecker Notes
Merge ✓ Yes Also streamed, with bookmarks, page labels and forms kept.
Split ✓ Yes
Extract, remove and reorder pages ✓ Yes
Rotate pages ✓ Yes
Stamp, overlay and underlay ✓ Yes Another PDF or HTML on every page, or selected pages.
Watermarks ✓ Yes Text, image and SVG.
Compress and optimise ✓ Yes Lossless recompression, duplicate fonts and images stored once, optional image downsampling.
Add or remove a password ✓ Yes
Edit existing text and content ✕ No No find-and-replace or content editing.
Insert blank pages, crop or resize pages ✕ No
N-up and imposition ✕ No
Convert an existing PDF to PDF/A ✕ No Only new documents are made as PDF/A.

Reading, rendering and conversion

Getting things out of existing PDFs.

Feature PdfPecker Notes
Render pages to PNG, JPEG, WebP and TIFF ✓ Yes Multi-page TIFF in colour, greyscale or CCITT Group 4.
All PDF image filters ✓ Yes Flate, LZW, RunLength, ASCII85, ASCIIHex, DCT, JPEG 2000, JBIG2 and CCITT.
All font types ✓ Yes Type 1, CFF, TrueType, Type 3 and CID fonts.
Fonts that are not embedded ½ Partly Standard fonts are substituted; CJK fonts and predefined CJK CMaps are not.
All seven shading types ✓ Yes Function, axial, radial and the four mesh types.
Colour spaces ✓ Yes Device, Cal, Lab, ICC-based, Indexed, Separation, DeviceN and Pattern.
ICC colour management ½ Partly ICC-based colours use their device equivalents; profiles are not applied.
Transparency groups, blend modes, soft masks ✓ Yes
Annotation appearances ✓ Yes Can be switched off.
Text extraction with positions ✓ Yes Pages, lines and words with coordinates, font and size.
Reading order ½ Partly Columns side by side are read across; the structure tree is not used.
OCR ✕ No Text in scans and outlines cannot be extracted.
PDF to HTML ✓ Yes Page images with a selectable, searchable text layer and working links.
Reflowing PDF to HTML ✕ No The HTML keeps the PDF's fixed layout.
Extract images ✕ No
PDF to Word, Excel or PowerPoint ✕ No

Edit this page on GitHub