PDF-filformat förklarat: Anatomi, lager och standarder
Vad finns egentligen inuti en PDF? En märkt diagram och ordlista som täcker de fyra fysiska sektionerna (header, body, xref, trailer), de sex innehållslagren (text, bilder, typsnitt, kommentarer, vektorer, signaturer), metadata och ISO-standarderna (PDF/A, PDF/X, PDF/UA, PDF/E, PDF/VT) som bygger ovanpå.
En PDF är inte en enskild sak. Det är en binär container med en specifik struktur på disk, en uppsättning innehållslager staplade inuti den containern och en familj av ISO-standarder byggda ovanpå bas-specifikationen. Öppna en i en hex-editor och strukturen syns i klartext på de första raderna. Öppna en i en visare och lagren renderas tillsammans som en enda sida.
Den här guiden är en märkt referens: den fysiska filstrukturen, innehållslagren som en kropp innehåller, metadata som omger allt, och standarderna (PDF/A, PDF/X, PDF/UA, PDF/E, PDF/VT) som begränsar den för specifika användningsfall.

Vill du använda det här diagrammet på din blogg? Kopiera den här inbäddningskoden:
De Fyra Fysiska Sektionerna
Varje PDF på disk har samma fyrdelade struktur, i den här ordningen:
1. Header
Filens första rad. Börjar alltid med %PDF- följt av ett versionsnummer:
%PDF-1.7Versioner sträcker sig från 1.0 (släppt 1993) till 2.0 (släppt 2017, nuvarande). Headern följs av en kommentarsrad med binära byte som signalerar till FTP och andra transportverktyg att detta är en binär fil.
2. Body - Indirekta Objekt
Största delen av filen. Varje sida, typsnitt, bild, kommentar och formulärfält är ett numrerat indirekt objekt:
1 0 obj
<< /Type /Catalog /Pages 2 0 R >>
endobj
2 0 obj
<< /Type /Pages /Kids [3 0 R] /Count 1 >>
endobj
3 0 obj
<< /Type /Page /Parent 2 0 R /Contents 4 0 R /Resources << ... >> >>
endobjVarje objekt har ett ID (numret före 0 obj), ett generationsnummer (0, används för inkrementella uppdateringar) och en nyttolast mellan << och >> för ordböcker eller stream och endstream för binära strömmar (bilddata, typsnittsdata, komprimerat innehåll).
Objekt refererar till varandra med syntaxen <id> <gen> R (t.ex. 3 0 R betyder "objekt 3, generation 0"). Det är så en sida refererar till typsnittet den använder, eller hur en katalog refererar till roten av sidträdet.
3. Korsreferenstabell (xref)
En byte-offset uppslagstabell. För varje objekt i kroppen registrerar xref dess absoluta byte-position i filen:
xref
0 6
0000000000 65535 f
0000000017 00000 n
0000000089 00000 n
0000000172 00000 n
0000000299 00000 n
0000000453 00000 nDetta är vad som gör PDF:er slumpmässigt åtkomliga. En visare kan läsa xref, hoppa direkt till byte-offset för objekt 3 och rendera den sidan utan att parsa resten av filen. Det är därför PDF:er av ett enda kapitel öppnas omedelbart även när källfilen är 500 sidor.
4. Trailer
Den sista sektionen. Talare till parsern var den hittar xref och vilket objekt som är roten:
trailer
<< /Size 6 /Root 1 0 R /Info 7 0 R >>
startxref
1893
%%EOFVärdet startxref är byte-offset för xref-tabellen. Markören %%EOF är filens bokstavliga slut. Trailers är vad som möjliggör inkrementella uppdateringar: att lägga till en ny xref + trailer i slutet låter dig lägga till objekt utan att skriva om hela filen.
De Sex Innehållslagren
Inuti kroppen lagras innehåll över sex lagertyper. Varje renderad PDF-sida är en sammansättning av dessa lager:
1. Text
Glyfpositioneringskommandon och typsnittsreferenser, inte textsträngar. En PDF lagrar instruktioner som "rita glyf 42 från typsnitt F3 vid position (120, 540)" snarare än "rita bokstaven A här." Det är därför text är valbar och sökbar: visaren mappar om glyfid till Unicode-kodpunkter via en ToUnicode-mappning (eller en CMap för CJK-typsnitt).
När text saknar en ToUnicode-mappning får du det klassiska problemet "PDF med valbar text som kopieras som skräp". Texten är synlig, men glyf-till-Unicode-mappningen är trasig eller saknas.
2. Bilder
Lagrade som inbäddade strömmar i ett av flera format:
- JPEG (DCTDecode-filter): fotografier, vanligast
- JPEG2000 (JPXDecode): högre kompression, mindre vanligt
- PNG-liknande (FlateDecode + Predictor): skärmdumpar, linjekonst
- CCITT Group 4 (CCITTFaxDecode): svartvit skannad text, används i arkivskanningar
- JBIG2 (JBIG2Decode): tvåfärgade bilder, vanligt i OCR:ade dokument
Bilder kan nedsamplas, komprimeras om eller ersättas utan att påverka annat innehåll.
3. Typsnitt
Inbäddade som fullständiga typsnittsprogram, delmängd (endast använda glyfer inkluderade) eller refererade med namn (måste vara installerade på visarens system). Delmängd är standard - det minskar filstorleken dramatiskt. Stödda typsnittsformat: Type1, TrueType, OpenType och CIDFont (för CJK).
När ett typsnitt refereras men inte är inbäddat och inte installerat på visarens system, ersätter visaren ett liknande typsnitt - vilket vanligtvis ser fel ut. PDF/A kräver att alla typsnitt är inbäddade för att förhindra detta.
4. Kommentarer
Höjdpunkter, kommentarer, länkar, stämplar, vattenstämplar och formulärfält är alla kommentarer. De läggs ovanpå sidinnehållet och kan läggas till, redigeras eller tas bort utan att ändra den underliggande sidan.
Formulärfält är ett specialfall: en interaktiv widget-kommentar (den synliga delen) plus en fältordbok (datadelen). När du fyller i ett formulär och sparar, ändras bara fältordböckerna - själva sidan är orörd.
5. Vektorgrafik
Linjer, former, kurvor och banor ritade med PostScript-liknande operatorer (moveto, lineto, curveto). Skalar oändligt utan kvalitetsförlust. De flesta CAD-exporter, diagram och illustrationer i PDF:er är vektorgrafik.
6. Digitala Signaturer
PKI-baserade signaturer knutna till byte-intervall i filen. Signaturordboken anger "byte 0 till 12 547 och 14 200 till filens slut är signerade" - ett litet intervall i mitten är reserverat för själva signaturvärdet. Varje ändring i de signerade byte-intervallen ogiltigförklarar signaturen, vilket är hur PDF upptäcker manipulering efter signering.
Vissa PDF:er har flera signaturer, lagerade som inkrementella uppdateringar - varje undertecknare signerar filen som den existerade när de mottog den, vilket bevarar kedjan.
Metadata: Två Parallella System
PDF har två metadatasystem som ofta inte stämmer överens:
Standard /Info-ordbok
Lagrad i trailern. Fält: Title, Author, Subject, Keywords, Creator (appen användaren skapade dokumentet i), Producer (appen som genererade PDF:en), CreationDate, ModDate. Vanliga textsträngar, lätta att läsa med vilket PDF-verktyg som helst.
XMP Metadata-ström
En separat XML-ström (Adobe XMP, baserad på RDF/XML) som stöder rikare scheman: Dublin Core, IPTC, anpassade domänspecifika scheman (färgprofiler, copyright-registreringar, manusversionering).
Moderna PDF-generatorer skriver till båda. Gamla PDF:er har bara /Info. Vissa PDF:er har föråldrad /Info från en tidigare version och korrekt XMP från en nyligen genomförd redigering - eller vice versa. Vid granskning av PDF:er för efterlevnad eller forensik, kontrollera båda.
ISO-standarder Byggda på PDF
Bas-PDF-specifikationen är ISO 32000. Flera härledda standarder begränsar PDF för specifika användningsfall:
| Standard | Användning | Begränsningar |
|---|---|---|
| PDF/A | Långtidsarkivering | Alla typsnitt inbäddade, ingen JavaScript, inget ljud/video, färgrum enhets-oberoende. Konformitetsnivåer: PDF/A-1, A-2, A-3 (tillåter filbilagor) |
| PDF/X | Tryckproduktion | CMYK-färg, inbäddade typsnitt och färgprofiler, ingen transparens (PDF/X-1a) eller kontrollerad transparens (PDF/X-4) |
| PDF/UA | Tillgänglighet | Taggat strukturträd, språkmetadata, alt-text för bilder, logisk läsordning |
| PDF/E | Ingenjörsvetenskap | 3D-modeller (U3D, PRC-format), CAD-specifik metadata |
| PDF/VT | Variabel transaktionell utskrift | Optimerad för personliga utskick i hög volym |
En PDF kan uppfylla flera standarder samtidigt - PDF/A-2u (arkivering med Unicode-mappning) plus PDF/UA (tillgänglighet) är vanligt för statliga och juridiska arkiv.
Linjäriserade PDF:er (Webboptimerade)
En "linjäriserad" eller "webboptimerad" PDF ordnar om kroppen så att den första sidans objekt visas tidigt i filen. En webbläsare kan rendera sida 1 efter att bara ha laddat ner de första ~50 KB istället för att vänta på hela filen. Trailern dupliceras i början, plus en hint-tabell som talar om för visaren var varje sida börjar.
De flesta moderna PDF-generatorer stöder linjärisering som ett "Spara för webben"-alternativ. Formatet lägger till 2-5% till filstorleken i utbyte mot snabb rendering av första sidan över långsamma anslutningar.
Kryptering och Behörigheter
PDF:er kan krypteras med ett lösenord (eller certifikat) och ges granulära behörigheter: skriva ut, kopiera text, modifiera, fylla i formulär, extrahera för tillgänglighet. Krypteringen lagras i trailerens /Encrypt-ordbok.
Krypteringsstyrkor har utvecklats: RC4 40-bit (tidiga PDF:er, trivialt knäckta idag), RC4 128-bit (fortfarande svag), AES-128, AES-256. Den ursprungliga Acrobat 5 RC4-implementationen knäcktes offentligt 2001; modern PDF-kryptering (AES-256, PDF 2.0) är sund när den används med starka lösenord.
Notera: "behörigheter" är rådgivande. En visare som respekterar dem kommer att verkställa dem. En visare som ignorerar dem (eller ett verktyg som tar bort krypteringen) gör det inte.
Hur PDFSub Läser PDF:er
PDFSub bearbetar PDF:er med Rusts PDFium-bindning (samma motor som driver Chromium's PDF-visare) plus PaddleOCR för skannade dokument. För fullständiga arkitekturdetaljer och en jämförelse med molnbaserade verktyg, se Webbläsare vs Moln PDF-säkerhet.
För att konvertera PDF:er till andra format samtidigt som strukturen som beskrivs ovan bevaras:
- PDF till Excel - extraherar text + tabeller, bevarar koordinater
- OCR PDF - lägger till ett sökbart textlager till skannade PDF:er
- PDF till Word - omformaterar text till redigerbara stycken
För arkivflöden specifikt, se Hur man konverterar PDF till PDF/A.
Vidare Läsning
- ISO 32000-2 (PDF 2.0 spec) - auktoritativ referens, bakom betalvägg
- Adobe PDF Reference Archives - gratis referens för PDF 1.7
- PDF Association - branscharbetsgrupp, gratis artiklar och konformitetstestfiler
För PDF-specifika ämnen: PDF-efterlevnadsguide för jurister, Guide för PDF/A-konvertering.