47 lines
1.9 KiB
Markdown
47 lines
1.9 KiB
Markdown
# What real PDFs actually use
|
|
|
|
Feature counts across the 51 PDFs on this machine (39 in ~/Downloads, 12 ISO spec
|
|
documents) — contracts, invoices, standards, scans, exports from Word, InDesign
|
|
and web tooling. Percentages are of files that contain the marker at all.
|
|
|
|
| Feature | Files | Note |
|
|
|---|---:|---|
|
|
| FlateDecode | 51 (100%) | the only filter that must be fast |
|
|
| DCTDecode | 19 (37%) | own JPEG decoder is not optional |
|
|
| ASCII85Decode | 3 (6%) | |
|
|
| CCITTFaxDecode | 1 (2%) | long tail |
|
|
| LZWDecode | 1 (2%) | long tail |
|
|
| JPXDecode / JBIG2Decode | 0 | never seen; pass through |
|
|
| xref streams + object streams | 26 (51%) | half the corpus is PDF 1.5+ structure |
|
|
| Linearized | 13 (25%) | |
|
|
| Encrypted | 3 (6%) | |
|
|
| AcroForm | 13 (25%) | |
|
|
| Annots | 27 (53%) | appearance streams matter for rendering |
|
|
| ExtGState | 44 (86%) | |
|
|
| SMask | 30 (59%) | **transparency is mainstream, not exotic** |
|
|
| Group (transparency) | 25 (49%) | |
|
|
| BM (blend mode) | 23 (45%) | |
|
|
| Type0 (composite) fonts | 27 (53%) | |
|
|
| CIDFontType2 | 29 (57%) | |
|
|
| FontFile2 (TrueType) | 31 (61%) | |
|
|
| FontFile3 (CFF) | 11 (22%) | |
|
|
| ToUnicode | 32 (63%) | text extraction has a real chance |
|
|
| Type3 fonts | 1 (2%) | long tail |
|
|
| ICCBased | 12 (24%) | render via /Alternate |
|
|
| Indexed | 8 (16%) | |
|
|
| Separation | 3 (6%) | |
|
|
| Lab | 3 (6%) | |
|
|
| Pattern | 7 (14%) | |
|
|
| Shading | 3 (6%) | |
|
|
| DeviceN, CalRGB | 0 | implement, but do not tune for |
|
|
|
|
Reproduce with the loop in the project history; it is a plain grep for each
|
|
marker across every PDF, which works because stream dictionaries are never
|
|
themselves inside an object stream.
|
|
|
|
**What this ordered:** Flate and DCT decode quality, TrueType and CFF glyph
|
|
outlines, Type0/CID mapping, `/ToUnicode`, and the transparency model (soft
|
|
masks, groups, blend modes) are the load-bearing work. CCITT, LZW, JPX, JBIG2,
|
|
Type3, DeviceN and the exotic shading types are correctness obligations, not
|
|
performance ones.
|